dycw-utilities 0.131.5__tar.gz → 0.131.7__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 (220) hide show
  1. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/PKG-INFO +1 -1
  2. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/pyproject.toml +2 -2
  3. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_hypothesis.py +35 -1
  4. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_whenever2.py +36 -6
  5. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/__init__.py +1 -1
  6. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/hypothesis.py +89 -15
  7. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/whenever2.py +71 -6
  8. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/.gitignore +0 -0
  9. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/LICENSE +0 -0
  10. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/README.md +0 -0
  11. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/__init__.py +0 -0
  12. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/conftest.py +0 -0
  13. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/modules/__init__.py +0 -0
  14. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/modules/package_missing/__init__.py +0 -0
  15. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/modules/package_missing/module.py +0 -0
  16. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/modules/package_with/__init__.py +0 -0
  17. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/modules/package_with/outer_1.py +0 -0
  18. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/modules/package_with/outer_2.py +0 -0
  19. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
  20. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
  21. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
  22. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
  23. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/modules/package_without/__init__.py +0 -0
  24. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/modules/package_without/module_1.py +0 -0
  25. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/modules/package_without/module_2.py +0 -0
  26. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/modules/standalone.py +0 -0
  27. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/modules/with_imports.py +0 -0
  28. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
  29. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
  30. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
  31. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
  32. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
  33. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
  34. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
  35. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
  36. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_aiolimiter.py +0 -0
  37. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_altair.py +0 -0
  38. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_asyncio.py +0 -0
  39. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_asyncio_classes/__init__.py +0 -0
  40. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_asyncio_classes/loopers.py +0 -0
  41. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_asyncio_classes/redis.py +0 -0
  42. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_atomicwrites.py +0 -0
  43. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_atools.py +0 -0
  44. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_cachetools.py +0 -0
  45. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_click.py +0 -0
  46. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_concurrent.py +0 -0
  47. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_contextlib.py +0 -0
  48. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_contextvars.py +0 -0
  49. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_cryptography.py +0 -0
  50. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_cvxpy.py +0 -0
  51. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_dataclasses.py +0 -0
  52. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_datetime.py +0 -0
  53. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_enum.py +0 -0
  54. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_errors.py +0 -0
  55. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_eventkit.py +0 -0
  56. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_fastapi.py +0 -0
  57. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_fpdf2.py +0 -0
  58. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_functions.py +0 -0
  59. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_functools.py +0 -0
  60. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_getpass.py +0 -0
  61. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_git.py +0 -0
  62. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_hashlib.py +0 -0
  63. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_http.py +0 -0
  64. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_importlib.py +0 -0
  65. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_inflect.py +0 -0
  66. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_ipython.py +0 -0
  67. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_iterables.py +0 -0
  68. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_jupyter.py +0 -0
  69. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_libcst.py +0 -0
  70. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_lightweight_charts.py +0 -0
  71. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_logging.py +0 -0
  72. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_luigi.py +0 -0
  73. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_math.py +0 -0
  74. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_memory_profiler.py +0 -0
  75. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_modules.py +0 -0
  76. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_more_itertools.py +0 -0
  77. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_numpy.py +0 -0
  78. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_operator.py +0 -0
  79. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_optuna.py +0 -0
  80. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_orjson.py +0 -0
  81. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_os.py +0 -0
  82. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_parse.py +0 -0
  83. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_pathlib.py +0 -0
  84. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_period.py +0 -0
  85. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_pickle.py +0 -0
  86. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_platform.py +0 -0
  87. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_polars.py +0 -0
  88. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_polars_ols.py +0 -0
  89. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_pottery.py +0 -0
  90. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_pqdm.py +0 -0
  91. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_psutil.py +0 -0
  92. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_pydantic.py +0 -0
  93. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_pyinstrument.py +0 -0
  94. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_pyrsistent.py +0 -0
  95. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_pytest.py +0 -0
  96. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_pytest_regressions.py +0 -0
  97. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_python_dotenv.py +0 -0
  98. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_random.py +0 -0
  99. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_re.py +0 -0
  100. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_redis.py +0 -0
  101. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_reprlib.py +0 -0
  102. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_scipy.py +0 -0
  103. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_sentinel.py +0 -0
  104. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_shelve.py +0 -0
  105. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_slack_sdk.py +0 -0
  106. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_socket.py +0 -0
  107. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_sqlalchemy.py +0 -0
  108. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_sqlalchemy_polars.py +0 -0
  109. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_statsmodel.py +0 -0
  110. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_streamlit.py +0 -0
  111. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_string.py +0 -0
  112. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_tempfile.py +0 -0
  113. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_tenacity.py +0 -0
  114. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_text.py +0 -0
  115. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_threading.py +0 -0
  116. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_timer.py +0 -0
  117. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_traceback.py +0 -0
  118. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_types.py +0 -0
  119. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_typing.py +0 -0
  120. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_typing_funcs/__init__.py +0 -0
  121. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_typing_funcs/no_future.py +0 -0
  122. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_typing_funcs/with_future.py +0 -0
  123. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_tzdata.py +0 -0
  124. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_tzlocal.py +0 -0
  125. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_uuid.py +0 -0
  126. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_version.py +0 -0
  127. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_warnings.py +0 -0
  128. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_whenever.py +0 -0
  129. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_zipfile.py +0 -0
  130. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/tests/test_zoneinfo.py +0 -0
  131. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/aiolimiter.py +0 -0
  132. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/altair.py +0 -0
  133. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/asyncio.py +0 -0
  134. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/atomicwrites.py +0 -0
  135. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/atools.py +0 -0
  136. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/cachetools.py +0 -0
  137. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/click.py +0 -0
  138. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/concurrent.py +0 -0
  139. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/contextlib.py +0 -0
  140. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/contextvars.py +0 -0
  141. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/cryptography.py +0 -0
  142. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/cvxpy.py +0 -0
  143. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/dataclasses.py +0 -0
  144. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/datetime.py +0 -0
  145. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/enum.py +0 -0
  146. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/errors.py +0 -0
  147. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/eventkit.py +0 -0
  148. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/fastapi.py +0 -0
  149. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/fpdf2.py +0 -0
  150. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/functions.py +0 -0
  151. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/functools.py +0 -0
  152. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/getpass.py +0 -0
  153. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/git.py +0 -0
  154. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/hashlib.py +0 -0
  155. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/http.py +0 -0
  156. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/importlib.py +0 -0
  157. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/inflect.py +0 -0
  158. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/ipython.py +0 -0
  159. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/iterables.py +0 -0
  160. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/jupyter.py +0 -0
  161. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/libcst.py +0 -0
  162. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/lightweight_charts.py +0 -0
  163. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/logging.py +0 -0
  164. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/luigi.py +0 -0
  165. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/math.py +0 -0
  166. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/memory_profiler.py +0 -0
  167. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/modules.py +0 -0
  168. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/more_itertools.py +0 -0
  169. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/numpy.py +0 -0
  170. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/operator.py +0 -0
  171. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/optuna.py +0 -0
  172. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/orjson.py +0 -0
  173. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/os.py +0 -0
  174. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/parse.py +0 -0
  175. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/pathlib.py +0 -0
  176. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/period.py +0 -0
  177. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/pickle.py +0 -0
  178. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/platform.py +0 -0
  179. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/polars.py +0 -0
  180. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/polars_ols.py +0 -0
  181. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/pottery.py +0 -0
  182. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/pqdm.py +0 -0
  183. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/psutil.py +0 -0
  184. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/py.typed +0 -0
  185. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/pydantic.py +0 -0
  186. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/pyinstrument.py +0 -0
  187. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/pyrsistent.py +0 -0
  188. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/pytest.py +0 -0
  189. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/pytest_regressions.py +0 -0
  190. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/python_dotenv.py +0 -0
  191. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/random.py +0 -0
  192. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/re.py +0 -0
  193. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/redis.py +0 -0
  194. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/reprlib.py +0 -0
  195. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/scipy.py +0 -0
  196. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/sentinel.py +0 -0
  197. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/shelve.py +0 -0
  198. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/slack_sdk.py +0 -0
  199. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/socket.py +0 -0
  200. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/sqlalchemy.py +0 -0
  201. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/sqlalchemy_polars.py +0 -0
  202. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/statsmodels.py +0 -0
  203. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/streamlit.py +0 -0
  204. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/string.py +0 -0
  205. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/tempfile.py +0 -0
  206. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/tenacity.py +0 -0
  207. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/text.py +0 -0
  208. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/threading.py +0 -0
  209. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/timer.py +0 -0
  210. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/traceback.py +0 -0
  211. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/types.py +0 -0
  212. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/typing.py +0 -0
  213. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/tzdata.py +0 -0
  214. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/tzlocal.py +0 -0
  215. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/uuid.py +0 -0
  216. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/version.py +0 -0
  217. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/warnings.py +0 -0
  218. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/whenever.py +0 -0
  219. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/src/utilities/zipfile.py +0 -0
  220. {dycw_utilities-0.131.5 → dycw_utilities-0.131.7}/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.5
3
+ Version: 0.131.7
4
4
  Author-email: Derek Wan <d.wan@icloud.com>
5
5
  License-File: LICENSE
6
6
  Requires-Python: >=3.12
@@ -94,7 +94,7 @@ dependencies = [
94
94
  name = "dycw-utilities"
95
95
  readme = "README.md"
96
96
  requires-python = ">= 3.12"
97
- version = "0.131.5"
97
+ version = "0.131.7"
98
98
 
99
99
  [project.optional-dependencies]
100
100
  logging = [
@@ -121,7 +121,7 @@ test = [
121
121
  # bump-my-version
122
122
  [tool.bumpversion]
123
123
  allow_dirty = true
124
- current_version = "0.131.5"
124
+ current_version = "0.131.7"
125
125
 
126
126
  [[tool.bumpversion.files]]
127
127
  filename = "src/utilities/__init__.py"
@@ -28,7 +28,7 @@ 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, ZonedDateTime
31
+ from whenever import Date, DateDelta, PlainDateTime, Time, TimeDelta, ZonedDateTime
32
32
 
33
33
  from tests.conftest import SKIPIF_CI_AND_WINDOWS
34
34
  from utilities.datetime import (
@@ -92,7 +92,9 @@ from utilities.hypothesis import (
92
92
  text_clean,
93
93
  text_digits,
94
94
  text_printable,
95
+ time_deltas_whenever,
95
96
  timedeltas_2w,
97
+ times_whenever,
96
98
  triples,
97
99
  uint32s,
98
100
  uint64s,
@@ -1153,6 +1155,38 @@ class TestTimeDeltas2W:
1153
1155
  assert min_value <= timedelta <= max_value
1154
1156
 
1155
1157
 
1158
+ class TestTimeDeltas:
1159
+ @given(data=data())
1160
+ def test_main(self, *, data: DataObject) -> None:
1161
+ min_value = data.draw(time_deltas_whenever() | none())
1162
+ max_value = data.draw(time_deltas_whenever() | none())
1163
+ with assume_does_not_raise(InvalidArgument):
1164
+ delta = data.draw(
1165
+ time_deltas_whenever(min_value=min_value, max_value=max_value)
1166
+ )
1167
+ assert isinstance(delta, TimeDelta)
1168
+ assert TimeDelta.parse_common_iso(delta.format_common_iso()) == delta
1169
+ if min_value is not None:
1170
+ assert delta >= min_value
1171
+ if max_value is not None:
1172
+ assert delta <= max_value
1173
+
1174
+
1175
+ class TestTimes:
1176
+ @given(data=data())
1177
+ def test_main(self, *, data: DataObject) -> None:
1178
+ min_value = data.draw(times_whenever() | none())
1179
+ max_value = data.draw(times_whenever() | none())
1180
+ with assume_does_not_raise(InvalidArgument):
1181
+ time = data.draw(times_whenever(min_value=min_value, max_value=max_value))
1182
+ assert isinstance(time, Time)
1183
+ assert Time.parse_common_iso(time.format_common_iso()) == time
1184
+ if min_value is not None:
1185
+ assert time >= min_value
1186
+ if max_value is not None:
1187
+ assert time <= max_value
1188
+
1189
+
1156
1190
  class TestTriples:
1157
1191
  @given(data=data(), unique=booleans(), sorted_=booleans())
1158
1192
  def test_main(self, *, data: DataObject, unique: bool, sorted_: bool) -> None:
@@ -6,11 +6,12 @@ from zoneinfo import ZoneInfo
6
6
  from hypothesis import given
7
7
  from hypothesis.strategies import just, timezones
8
8
  from pytest import mark, param, raises
9
- from whenever import DateDelta, DateTimeDelta, TimeDelta, ZonedDateTime
9
+ from whenever import Date, DateDelta, DateTimeDelta, TimeDelta, ZonedDateTime
10
10
 
11
11
  from tests.conftest import IS_CI
12
12
  from utilities.hypothesis import zoned_datetimes_whenever
13
13
  from utilities.tzdata import HongKong, Tokyo
14
+ from utilities.tzlocal import LOCAL_TIME_ZONE
14
15
  from utilities.whenever2 import (
15
16
  DATE_DELTA_MAX,
16
17
  DATE_DELTA_MIN,
@@ -22,11 +23,14 @@ from utilities.whenever2 import (
22
23
  DATE_TIME_DELTA_MIN,
23
24
  DATE_TIME_DELTA_PARSABLE_MAX,
24
25
  DATE_TIME_DELTA_PARSABLE_MIN,
26
+ NOW_LOCAL,
25
27
  NOW_UTC,
26
28
  PLAIN_DATE_TIME_MAX,
27
29
  PLAIN_DATE_TIME_MIN,
28
30
  TIME_DELTA_MAX,
29
31
  TIME_DELTA_MIN,
32
+ TODAY_LOCAL,
33
+ TODAY_UTC,
30
34
  ZONED_DATE_TIME_MAX,
31
35
  ZONED_DATE_TIME_MIN,
32
36
  WheneverLogRecord,
@@ -35,6 +39,8 @@ from utilities.whenever2 import (
35
39
  from_timestamp_nanos,
36
40
  get_now,
37
41
  get_now_local,
42
+ get_today,
43
+ get_today_local,
38
44
  )
39
45
  from utilities.zoneinfo import UTC
40
46
 
@@ -81,6 +87,28 @@ class TestGetNowLocal:
81
87
  time_zones = {ETC, HongKong, Tokyo, UTC}
82
88
  assert any(now.tz == time_zone.key for time_zone in time_zones)
83
89
 
90
+ def test_constant(self) -> None:
91
+ assert isinstance(NOW_LOCAL, ZonedDateTime)
92
+ assert NOW_LOCAL.tz == LOCAL_TIME_ZONE.key
93
+
94
+
95
+ class TestGetToday:
96
+ def test_function(self) -> None:
97
+ today = get_today()
98
+ assert isinstance(today, Date)
99
+
100
+ def test_constant(self) -> None:
101
+ assert isinstance(TODAY_UTC, Date)
102
+
103
+
104
+ class TestGetTodayLocal:
105
+ def test_function(self) -> None:
106
+ today = get_today_local()
107
+ assert isinstance(today, Date)
108
+
109
+ def test_constant(self) -> None:
110
+ assert isinstance(TODAY_LOCAL, Date)
111
+
84
112
 
85
113
  class TestMinMax:
86
114
  def test_date_min(self) -> None:
@@ -151,19 +179,19 @@ class TestMinMax:
151
179
 
152
180
  def test_date_time_delta_parsable_min(self) -> None:
153
181
  def func(delta: DateTimeDelta, /) -> None:
154
- _ = DateDelta.parse_common_iso(delta.format_common_iso())
182
+ _ = DateTimeDelta.parse_common_iso(delta.format_common_iso())
155
183
 
156
184
  _ = func(DATE_TIME_DELTA_PARSABLE_MIN)
157
- with raises(ValueError, match="Invalid format: '.*'"):
185
+ with raises(ValueError, match="Addition result out of bounds"):
158
186
  _ = func(DATE_TIME_DELTA_PARSABLE_MIN - DateTimeDelta(nanoseconds=1))
159
187
 
160
188
  def test_date_time_delta_parsable_max(self) -> None:
161
189
  def func(delta: DateTimeDelta, /) -> None:
162
- _ = DateDelta.parse_common_iso(delta.format_common_iso())
190
+ _ = DateTimeDelta.parse_common_iso(delta.format_common_iso())
163
191
 
164
192
  _ = func(DATE_TIME_DELTA_PARSABLE_MAX)
165
- with raises(ValueError, match="Invalid format: '.*'"):
166
- _ = func(DATE_TIME_DELTA_PARSABLE_MAX + DateTimeDelta(nanoseconds=1))
193
+ with raises(ValueError, match="Invalid format or out of range: '.*'"):
194
+ _ = func(DATE_TIME_DELTA_PARSABLE_MAX + TimeDelta(nanoseconds=1))
167
195
 
168
196
  def test_plain_date_time_min(self) -> None:
169
197
  with raises(ValueError, match=r"Result of subtract\(\) out of range"):
@@ -184,6 +212,7 @@ class TestMinMax:
184
212
  ],
185
213
  )
186
214
  def test_time_delta_min(self, *, delta: TimeDelta) -> None:
215
+ _ = TimeDelta.parse_common_iso(TIME_DELTA_MIN.format_common_iso())
187
216
  with raises(ValueError, match="Addition result out of range"):
188
217
  _ = TIME_DELTA_MIN - delta
189
218
 
@@ -202,6 +231,7 @@ class TestMinMax:
202
231
  def test_time_delta_max(self, *, delta: TimeDelta, is_ok: bool) -> None:
203
232
  if is_ok:
204
233
  _ = TIME_DELTA_MAX + delta
234
+ _ = TimeDelta.parse_common_iso(delta.format_common_iso())
205
235
  else:
206
236
  with raises(ValueError, match="Addition result out of range"):
207
237
  _ = TIME_DELTA_MAX + delta
@@ -1,3 +1,3 @@
1
1
  from __future__ import annotations
2
2
 
3
- __version__ = "0.131.5"
3
+ __version__ = "0.131.7"
@@ -24,6 +24,7 @@ from typing import (
24
24
  override,
25
25
  )
26
26
 
27
+ import hypothesis.strategies
27
28
  from hypothesis import HealthCheck, Phase, Verbosity, assume, settings
28
29
  from hypothesis.errors import InvalidArgument
29
30
  from hypothesis.strategies import (
@@ -47,7 +48,7 @@ from hypothesis.strategies import (
47
48
  uuids,
48
49
  )
49
50
  from hypothesis.utils.conventions import not_set
50
- from whenever import Date, DateDelta
51
+ from whenever import Date, DateDelta, PlainDateTime, Time, TimeDelta
51
52
 
52
53
  from utilities.datetime import (
53
54
  DATETIME_MAX_NAIVE,
@@ -89,6 +90,20 @@ from utilities.platform import IS_WINDOWS
89
90
  from utilities.sentinel import Sentinel, sentinel
90
91
  from utilities.tempfile import TEMP_DIR, TemporaryDirectory
91
92
  from utilities.version import Version
93
+ from utilities.whenever2 import (
94
+ DATE_DELTA_MAX,
95
+ DATE_DELTA_MIN,
96
+ DATE_DELTA_PARSABLE_MAX,
97
+ DATE_DELTA_PARSABLE_MIN,
98
+ DATE_MAX,
99
+ DATE_MIN,
100
+ PLAIN_DATE_TIME_MAX,
101
+ PLAIN_DATE_TIME_MIN,
102
+ TIME_DELTA_MAX,
103
+ TIME_DELTA_MIN,
104
+ TIME_MAX,
105
+ TIME_MIN,
106
+ )
92
107
  from utilities.zoneinfo import UTC, ensure_time_zone
93
108
 
94
109
  if TYPE_CHECKING:
@@ -97,7 +112,7 @@ if TYPE_CHECKING:
97
112
 
98
113
  from hypothesis.database import ExampleDatabase
99
114
  from numpy.random import RandomState
100
- from whenever import PlainDateTime, ZonedDateTime
115
+ from whenever import ZonedDateTime
101
116
 
102
117
  from utilities.numpy import NDArrayB, NDArrayF, NDArrayI, NDArrayO
103
118
  from utilities.types import Duration, Number, RoundMode, TimeZoneLike
@@ -170,13 +185,6 @@ def date_deltas_whenever(
170
185
  parsable: MaybeSearchStrategy[bool] = False,
171
186
  ) -> DateDelta:
172
187
  """Strategy for generating date deltas."""
173
- from utilities.whenever2 import (
174
- DATE_DELTA_MAX,
175
- DATE_DELTA_MIN,
176
- DATE_DELTA_PARSABLE_MAX,
177
- DATE_DELTA_PARSABLE_MIN,
178
- )
179
-
180
188
  min_value_, max_value_ = [draw2(draw, v) for v in [min_value, max_value]]
181
189
  match min_value_:
182
190
  case None:
@@ -307,8 +315,6 @@ def dates_whenever(
307
315
  max_value: MaybeSearchStrategy[Date | None] = None,
308
316
  ) -> Date:
309
317
  """Strategy for generating dates."""
310
- from utilities.whenever2 import DATE_MAX, DATE_MIN
311
-
312
318
  min_value_, max_value_ = [draw2(draw, v) for v in [min_value, max_value]]
313
319
  match min_value_:
314
320
  case None:
@@ -1069,10 +1075,6 @@ def plain_datetimes_whenever(
1069
1075
  max_value: MaybeSearchStrategy[PlainDateTime | None] = None,
1070
1076
  ) -> PlainDateTime:
1071
1077
  """Strategy for generating plain datetimes."""
1072
- from whenever import PlainDateTime
1073
-
1074
- from utilities.whenever2 import PLAIN_DATE_TIME_MAX, PLAIN_DATE_TIME_MIN
1075
-
1076
1078
  min_value_, max_value_ = [draw2(draw, v) for v in [min_value, max_value]]
1077
1079
  match min_value_:
1078
1080
  case None:
@@ -1405,6 +1407,41 @@ def text_printable(
1405
1407
  ##
1406
1408
 
1407
1409
 
1410
+ @composite
1411
+ def time_deltas_whenever(
1412
+ draw: DrawFn,
1413
+ /,
1414
+ *,
1415
+ min_value: MaybeSearchStrategy[TimeDelta | None] = None,
1416
+ max_value: MaybeSearchStrategy[TimeDelta | None] = None,
1417
+ ) -> TimeDelta:
1418
+ """Strategy for generating time deltas."""
1419
+ min_value_, max_value_ = [draw2(draw, v) for v in [min_value, max_value]]
1420
+ match min_value_:
1421
+ case None:
1422
+ min_value_ = TIME_DELTA_MIN
1423
+ case TimeDelta():
1424
+ ...
1425
+ case _ as never:
1426
+ assert_never(never)
1427
+ match max_value_:
1428
+ case None:
1429
+ max_value_ = TIME_DELTA_MAX
1430
+ case TimeDelta():
1431
+ ...
1432
+ case _ as never:
1433
+ assert_never(never)
1434
+ py_time = draw(
1435
+ hypothesis.strategies.timedeltas(
1436
+ min_value=min_value_.py_timedelta(), max_value=max_value_.py_timedelta()
1437
+ )
1438
+ )
1439
+ return TimeDelta.from_py_timedelta(py_time)
1440
+
1441
+
1442
+ ##
1443
+
1444
+
1408
1445
  @composite
1409
1446
  def timedeltas_2w(
1410
1447
  draw: DrawFn,
@@ -1431,6 +1468,41 @@ def timedeltas_2w(
1431
1468
  ##
1432
1469
 
1433
1470
 
1471
+ @composite
1472
+ def times_whenever(
1473
+ draw: DrawFn,
1474
+ /,
1475
+ *,
1476
+ min_value: MaybeSearchStrategy[Time | None] = None,
1477
+ max_value: MaybeSearchStrategy[Time | None] = None,
1478
+ ) -> Time:
1479
+ """Strategy for generating times."""
1480
+ min_value_, max_value_ = [draw2(draw, v) for v in [min_value, max_value]]
1481
+ match min_value_:
1482
+ case None:
1483
+ min_value_ = TIME_MIN
1484
+ case Time():
1485
+ ...
1486
+ case _ as never:
1487
+ assert_never(never)
1488
+ match max_value_:
1489
+ case None:
1490
+ max_value_ = TIME_MAX
1491
+ case Time():
1492
+ ...
1493
+ case _ as never:
1494
+ assert_never(never)
1495
+ py_time = draw(
1496
+ hypothesis.strategies.times(
1497
+ min_value=min_value_.py_time(), max_value=max_value_.py_time()
1498
+ )
1499
+ )
1500
+ return Time.from_py_time(py_time)
1501
+
1502
+
1503
+ ##
1504
+
1505
+
1434
1506
  def triples(
1435
1507
  strategy: SearchStrategy[_T],
1436
1508
  /,
@@ -1651,7 +1723,9 @@ __all__ = [
1651
1723
  "text_clean",
1652
1724
  "text_digits",
1653
1725
  "text_printable",
1726
+ "time_deltas_whenever",
1654
1727
  "timedeltas_2w",
1728
+ "times_whenever",
1655
1729
  "triples",
1656
1730
  "uint32s",
1657
1731
  "uint64s",
@@ -5,7 +5,15 @@ from functools import cache
5
5
  from logging import LogRecord
6
6
  from typing import TYPE_CHECKING, Any, override
7
7
 
8
- from whenever import Date, DateTimeDelta, PlainDateTime, ZonedDateTime
8
+ from whenever import (
9
+ Date,
10
+ DateDelta,
11
+ DateTimeDelta,
12
+ PlainDateTime,
13
+ Time,
14
+ TimeDelta,
15
+ ZonedDateTime,
16
+ )
9
17
 
10
18
  from utilities.zoneinfo import UTC, get_time_zone_name
11
19
 
@@ -15,8 +23,15 @@ if TYPE_CHECKING:
15
23
  from utilities.types import TimeZoneLike
16
24
 
17
25
 
26
+ ## bounds
27
+
28
+
18
29
  DATE_MIN = Date.from_py_date(dt.date.min)
19
30
  DATE_MAX = Date.from_py_date(dt.date.max)
31
+ TIME_MIN = Time.from_py_time(dt.time.min)
32
+ TIME_MAX = Time.from_py_time(dt.time.max)
33
+
34
+
20
35
  PLAIN_DATE_TIME_MIN = PlainDateTime.from_py_datetime(dt.datetime.min) # noqa: DTZ901
21
36
  PLAIN_DATE_TIME_MAX = PlainDateTime.from_py_datetime(dt.datetime.max) # noqa: DTZ901
22
37
  ZONED_DATE_TIME_MIN = PLAIN_DATE_TIME_MIN.assume_tz(UTC.key)
@@ -28,10 +43,24 @@ DATE_DELTA_MAX = DATE_TIME_DELTA_MAX.date_part()
28
43
  TIME_DELTA_MIN = DATE_TIME_DELTA_MIN.time_part()
29
44
  TIME_DELTA_MAX = DATE_TIME_DELTA_MAX.time_part()
30
45
 
31
- DATE_TIME_DELTA_PARSABLE_MIN = DateTimeDelta(days=-999999)
32
- DATE_TIME_DELTA_PARSABLE_MAX = DateTimeDelta(days=999999)
33
- DATE_DELTA_PARSABLE_MIN = DATE_TIME_DELTA_PARSABLE_MIN.date_part()
34
- DATE_DELTA_PARSABLE_MAX = DATE_TIME_DELTA_PARSABLE_MAX.date_part()
46
+
47
+ DATE_TIME_DELTA_PARSABLE_MIN = DateTimeDelta(days=-999999, seconds=-316192377600)
48
+ DATE_TIME_DELTA_PARSABLE_MAX = DateTimeDelta(days=999999, seconds=316192377600)
49
+ DATE_DELTA_PARSABLE_MIN = DateDelta(days=-999999)
50
+ DATE_DELTA_PARSABLE_MAX = DateDelta(days=999999)
51
+
52
+
53
+ ## common constants
54
+
55
+
56
+ ZERO_TIME = Time()
57
+ MICROSECOND = TimeDelta(microseconds=1)
58
+ MILLISECOND = TimeDelta(milliseconds=1)
59
+ SECOND = TimeDelta(seconds=1)
60
+ MINUTE = TimeDelta(minutes=1)
61
+ HOUR = TimeDelta(hours=1)
62
+ DAY = DateDelta(days=1)
63
+ WEEK = DateDelta(weeks=1)
35
64
 
36
65
 
37
66
  ##
@@ -68,6 +97,28 @@ def get_now_local() -> ZonedDateTime:
68
97
  return get_now(time_zone="local")
69
98
 
70
99
 
100
+ NOW_LOCAL = get_now_local()
101
+
102
+
103
+ ##
104
+
105
+
106
+ def get_today(*, time_zone: TimeZoneLike = UTC) -> Date:
107
+ """Get the current, timezone-aware local date."""
108
+ return get_now(time_zone=time_zone).date()
109
+
110
+
111
+ TODAY_UTC = get_today(time_zone=UTC)
112
+
113
+
114
+ def get_today_local() -> Date:
115
+ """Get the current, timezone-aware local date."""
116
+ return get_today(time_zone="local")
117
+
118
+
119
+ TODAY_LOCAL = get_today_local()
120
+
121
+
71
122
  ##
72
123
 
73
124
 
@@ -132,10 +183,23 @@ __all__ = [
132
183
  "DATE_TIME_DELTA_MIN",
133
184
  "DATE_TIME_DELTA_PARSABLE_MAX",
134
185
  "DATE_TIME_DELTA_PARSABLE_MIN",
186
+ "DAY",
187
+ "HOUR",
188
+ "MICROSECOND",
189
+ "MILLISECOND",
190
+ "MINUTE",
191
+ "NOW_LOCAL",
135
192
  "PLAIN_DATE_TIME_MAX",
136
193
  "PLAIN_DATE_TIME_MIN",
194
+ "SECOND",
137
195
  "TIME_DELTA_MAX",
138
196
  "TIME_DELTA_MIN",
197
+ "TIME_MAX",
198
+ "TIME_MIN",
199
+ "TODAY_LOCAL",
200
+ "TODAY_UTC",
201
+ "WEEK",
202
+ "ZERO_TIME",
139
203
  "ZONED_DATE_TIME_MAX",
140
204
  "ZONED_DATE_TIME_MIN",
141
205
  "WheneverLogRecord",
@@ -143,6 +207,7 @@ __all__ = [
143
207
  "from_timestamp_millis",
144
208
  "from_timestamp_nanos",
145
209
  "get_now",
146
- "get_now",
147
210
  "get_now_local",
211
+ "get_today",
212
+ "get_today_local",
148
213
  ]