dycw-utilities 0.125.9__tar.gz → 0.125.11__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 (223) hide show
  1. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/PKG-INFO +27 -27
  2. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/pyproject.toml +32 -32
  3. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_iterables.py +64 -0
  4. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/__init__.py +1 -1
  5. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/iterables.py +52 -0
  6. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/.gitignore +0 -0
  7. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/LICENSE +0 -0
  8. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/README.md +0 -0
  9. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/__init__.py +0 -0
  10. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/conftest.py +0 -0
  11. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/modules/__init__.py +0 -0
  12. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/modules/package_missing/__init__.py +0 -0
  13. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/modules/package_missing/module.py +0 -0
  14. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/modules/package_with/__init__.py +0 -0
  15. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/modules/package_with/outer_1.py +0 -0
  16. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/modules/package_with/outer_2.py +0 -0
  17. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
  18. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
  19. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
  20. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
  21. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/modules/package_without/__init__.py +0 -0
  22. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/modules/package_without/module_1.py +0 -0
  23. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/modules/package_without/module_2.py +0 -0
  24. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/modules/standalone.py +0 -0
  25. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/modules/with_imports.py +0 -0
  26. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
  27. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
  28. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
  29. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
  30. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
  31. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
  32. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
  33. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
  34. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_altair.py +0 -0
  35. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_asyncio.py +0 -0
  36. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_atomicwrites.py +0 -0
  37. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_atools.py +0 -0
  38. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_cachetools.py +0 -0
  39. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_click.py +0 -0
  40. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_concurrent.py +0 -0
  41. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_contextlib.py +0 -0
  42. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_contextvars.py +0 -0
  43. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_cryptography.py +0 -0
  44. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_cvxpy.py +0 -0
  45. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_dataclasses.py +0 -0
  46. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_datetime.py +0 -0
  47. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_enum.py +0 -0
  48. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_errors.py +0 -0
  49. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_eventkit.py +0 -0
  50. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_fastapi.py +0 -0
  51. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_fpdf2.py +0 -0
  52. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_functions.py +0 -0
  53. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_functools.py +0 -0
  54. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_getpass.py +0 -0
  55. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_git.py +0 -0
  56. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_hashlib.py +0 -0
  57. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_http.py +0 -0
  58. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_hypothesis.py +0 -0
  59. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_importlib.py +0 -0
  60. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_ipython.py +0 -0
  61. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_jupyter.py +0 -0
  62. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_libcst.py +0 -0
  63. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_lightweight_charts.py +0 -0
  64. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_logging.py +0 -0
  65. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_loguru.py +0 -0
  66. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_luigi.py +0 -0
  67. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_math.py +0 -0
  68. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_memory_profiler.py +0 -0
  69. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_modules.py +0 -0
  70. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_more_itertools.py +0 -0
  71. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_numpy.py +0 -0
  72. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_operator.py +0 -0
  73. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_optuna.py +0 -0
  74. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_orjson.py +0 -0
  75. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_os.py +0 -0
  76. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_parse.py +0 -0
  77. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_pathlib.py +0 -0
  78. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_period.py +0 -0
  79. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_pickle.py +0 -0
  80. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_platform.py +0 -0
  81. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_polars.py +0 -0
  82. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_polars_ols.py +0 -0
  83. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_pqdm.py +0 -0
  84. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_pydantic.py +0 -0
  85. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_pyinstrument.py +0 -0
  86. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_pyrsistent.py +0 -0
  87. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_pytest.py +0 -0
  88. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_pytest_regressions.py +0 -0
  89. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_python_dotenv.py +0 -0
  90. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_random.py +0 -0
  91. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_re.py +0 -0
  92. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_redis.py +0 -0
  93. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_reprlib.py +0 -0
  94. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_rich.py +0 -0
  95. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_scipy.py +0 -0
  96. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_sentinel.py +0 -0
  97. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_shelve.py +0 -0
  98. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_slack_sdk.py +0 -0
  99. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_socket.py +0 -0
  100. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_sqlalchemy.py +0 -0
  101. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_sqlalchemy_polars.py +0 -0
  102. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_statsmodel.py +0 -0
  103. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_streamlit.py +0 -0
  104. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_sys.py +0 -0
  105. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_tempfile.py +0 -0
  106. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_tenacity.py +0 -0
  107. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_text.py +0 -0
  108. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_threading.py +0 -0
  109. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_timer.py +0 -0
  110. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_traceback.py +0 -0
  111. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_traceback_funcs/__init__.py +0 -0
  112. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_traceback_funcs/chain.py +0 -0
  113. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_traceback_funcs/decorated_async.py +0 -0
  114. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_traceback_funcs/decorated_sync.py +0 -0
  115. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_traceback_funcs/error_bind.py +0 -0
  116. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_traceback_funcs/many.py +0 -0
  117. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_traceback_funcs/one.py +0 -0
  118. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_traceback_funcs/recursive.py +0 -0
  119. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_traceback_funcs/task_group_one.py +0 -0
  120. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_traceback_funcs/task_group_two.py +0 -0
  121. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_traceback_funcs/two.py +0 -0
  122. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_traceback_funcs/untraced.py +0 -0
  123. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_types.py +0 -0
  124. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_typing.py +0 -0
  125. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_typing_funcs/__init__.py +0 -0
  126. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_typing_funcs/no_future.py +0 -0
  127. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_typing_funcs/with_future.py +0 -0
  128. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_tzdata.py +0 -0
  129. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_tzlocal.py +0 -0
  130. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_uuid.py +0 -0
  131. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_version.py +0 -0
  132. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_warnings.py +0 -0
  133. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_whenever.py +0 -0
  134. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_zipfile.py +0 -0
  135. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/tests/test_zoneinfo.py +0 -0
  136. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/altair.py +0 -0
  137. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/asyncio.py +0 -0
  138. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/atomicwrites.py +0 -0
  139. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/atools.py +0 -0
  140. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/cachetools.py +0 -0
  141. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/click.py +0 -0
  142. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/concurrent.py +0 -0
  143. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/contextlib.py +0 -0
  144. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/contextvars.py +0 -0
  145. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/cryptography.py +0 -0
  146. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/cvxpy.py +0 -0
  147. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/dataclasses.py +0 -0
  148. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/datetime.py +0 -0
  149. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/enum.py +0 -0
  150. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/errors.py +0 -0
  151. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/eventkit.py +0 -0
  152. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/fastapi.py +0 -0
  153. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/fpdf2.py +0 -0
  154. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/functions.py +0 -0
  155. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/functools.py +0 -0
  156. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/getpass.py +0 -0
  157. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/git.py +0 -0
  158. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/hashlib.py +0 -0
  159. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/http.py +0 -0
  160. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/hypothesis.py +0 -0
  161. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/importlib.py +0 -0
  162. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/ipython.py +0 -0
  163. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/jupyter.py +0 -0
  164. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/libcst.py +0 -0
  165. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/lightweight_charts.py +0 -0
  166. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/logging.py +0 -0
  167. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/loguru.py +0 -0
  168. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/luigi.py +0 -0
  169. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/math.py +0 -0
  170. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/memory_profiler.py +0 -0
  171. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/modules.py +0 -0
  172. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/more_itertools.py +0 -0
  173. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/numpy.py +0 -0
  174. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/operator.py +0 -0
  175. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/optuna.py +0 -0
  176. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/orjson.py +0 -0
  177. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/os.py +0 -0
  178. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/parse.py +0 -0
  179. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/pathlib.py +0 -0
  180. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/period.py +0 -0
  181. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/pickle.py +0 -0
  182. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/platform.py +0 -0
  183. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/polars.py +0 -0
  184. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/polars_ols.py +0 -0
  185. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/pqdm.py +0 -0
  186. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/py.typed +0 -0
  187. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/pydantic.py +0 -0
  188. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/pyinstrument.py +0 -0
  189. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/pyrsistent.py +0 -0
  190. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/pytest.py +0 -0
  191. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/pytest_regressions.py +0 -0
  192. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/python_dotenv.py +0 -0
  193. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/random.py +0 -0
  194. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/re.py +0 -0
  195. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/redis.py +0 -0
  196. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/reprlib.py +0 -0
  197. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/rich.py +0 -0
  198. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/scipy.py +0 -0
  199. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/sentinel.py +0 -0
  200. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/shelve.py +0 -0
  201. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/slack_sdk.py +0 -0
  202. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/socket.py +0 -0
  203. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/sqlalchemy.py +0 -0
  204. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/sqlalchemy_polars.py +0 -0
  205. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/statsmodels.py +0 -0
  206. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/streamlit.py +0 -0
  207. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/sys.py +0 -0
  208. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/tempfile.py +0 -0
  209. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/tenacity.py +0 -0
  210. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/text.py +0 -0
  211. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/threading.py +0 -0
  212. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/timer.py +0 -0
  213. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/traceback.py +0 -0
  214. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/types.py +0 -0
  215. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/typing.py +0 -0
  216. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/tzdata.py +0 -0
  217. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/tzlocal.py +0 -0
  218. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/uuid.py +0 -0
  219. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/version.py +0 -0
  220. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/warnings.py +0 -0
  221. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/whenever.py +0 -0
  222. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/zipfile.py +0 -0
  223. {dycw_utilities-0.125.9 → dycw_utilities-0.125.11}/src/utilities/zoneinfo.py +0 -0
@@ -1,16 +1,16 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dycw-utilities
3
- Version: 0.125.9
3
+ Version: 0.125.11
4
4
  Author-email: Derek Wan <d.wan@icloud.com>
5
5
  License-File: LICENSE
6
6
  Requires-Python: >=3.12
7
7
  Requires-Dist: typing-extensions<4.14,>=4.13.1
8
8
  Provides-Extra: test
9
- Requires-Dist: hypothesis<6.132,>=6.131.28; extra == 'test'
9
+ Requires-Dist: hypothesis<6.132,>=6.131.30; extra == 'test'
10
10
  Requires-Dist: pytest-asyncio<1.1,>=1.0.0; extra == 'test'
11
11
  Requires-Dist: pytest-cov<6.2,>=6.1.1; extra == 'test'
12
12
  Requires-Dist: pytest-instafail<0.6,>=0.5.0; extra == 'test'
13
- Requires-Dist: pytest-lazy-fixtures<1.2,>=1.1.3; extra == 'test'
13
+ Requires-Dist: pytest-lazy-fixtures<1.2,>=1.1.4; extra == 'test'
14
14
  Requires-Dist: pytest-only<2.2,>=2.1.2; extra == 'test'
15
15
  Requires-Dist: pytest-randomly<3.17,>=3.16.0; extra == 'test'
16
16
  Requires-Dist: pytest-regressions<2.8,>=2.7.0; extra == 'test'
@@ -26,7 +26,7 @@ Requires-Dist: atomicwrites<1.5,>=1.4.1; extra == 'zzz-test-altair'
26
26
  Requires-Dist: img2pdf<0.7,>=0.6.0; extra == 'zzz-test-altair'
27
27
  Requires-Dist: polars-lts-cpu<1.31,>=1.30.0; extra == 'zzz-test-altair'
28
28
  Requires-Dist: vl-convert-python<1.8,>=1.7.0; extra == 'zzz-test-altair'
29
- Requires-Dist: whenever<0.9,>=0.8.2; extra == 'zzz-test-altair'
29
+ Requires-Dist: whenever<0.9,>=0.8.4; extra == 'zzz-test-altair'
30
30
  Provides-Extra: zzz-test-asyncio
31
31
  Provides-Extra: zzz-test-atomicwrites
32
32
  Requires-Dist: atomicwrites<1.5,>=1.4.1; extra == 'zzz-test-atomicwrites'
@@ -37,7 +37,7 @@ Requires-Dist: cachetools<5.6,>=5.5.2; extra == 'zzz-test-cachetools'
37
37
  Provides-Extra: zzz-test-click
38
38
  Requires-Dist: click<8.3,>=8.2.1; extra == 'zzz-test-click'
39
39
  Requires-Dist: sqlalchemy<2.1,>=2.0.41; extra == 'zzz-test-click'
40
- Requires-Dist: whenever<0.9,>=0.8.2; extra == 'zzz-test-click'
40
+ Requires-Dist: whenever<0.9,>=0.8.4; extra == 'zzz-test-click'
41
41
  Provides-Extra: zzz-test-contextlib
42
42
  Provides-Extra: zzz-test-contextvars
43
43
  Provides-Extra: zzz-test-cryptography
@@ -47,10 +47,10 @@ Requires-Dist: cvxpy<1.7,>=1.6.5; extra == 'zzz-test-cvxpy'
47
47
  Provides-Extra: zzz-test-dataclasses
48
48
  Requires-Dist: orjson<3.11,>=3.10.15; extra == 'zzz-test-dataclasses'
49
49
  Requires-Dist: polars-lts-cpu<1.31,>=1.30.0; extra == 'zzz-test-dataclasses'
50
- Requires-Dist: whenever<0.9,>=0.8.2; extra == 'zzz-test-dataclasses'
50
+ Requires-Dist: whenever<0.9,>=0.8.4; extra == 'zzz-test-dataclasses'
51
51
  Provides-Extra: zzz-test-datetime
52
52
  Requires-Dist: tzlocal<5.4,>=5.3.1; extra == 'zzz-test-datetime'
53
- Requires-Dist: whenever<0.9,>=0.8.2; extra == 'zzz-test-datetime'
53
+ Requires-Dist: whenever<0.9,>=0.8.4; extra == 'zzz-test-datetime'
54
54
  Provides-Extra: zzz-test-enum
55
55
  Provides-Extra: zzz-test-errors
56
56
  Provides-Extra: zzz-test-eventkit
@@ -69,16 +69,16 @@ Provides-Extra: zzz-test-git
69
69
  Provides-Extra: zzz-test-hashlib
70
70
  Requires-Dist: orjson<3.11,>=3.10.15; extra == 'zzz-test-hashlib'
71
71
  Requires-Dist: polars-lts-cpu<1.31,>=1.30.0; extra == 'zzz-test-hashlib'
72
- Requires-Dist: whenever<0.9,>=0.8.2; extra == 'zzz-test-hashlib'
72
+ Requires-Dist: whenever<0.9,>=0.8.4; extra == 'zzz-test-hashlib'
73
73
  Provides-Extra: zzz-test-http
74
74
  Requires-Dist: atomicwrites<1.5,>=1.4.1; extra == 'zzz-test-http'
75
75
  Requires-Dist: orjson<3.11,>=3.10.18; extra == 'zzz-test-http'
76
- Requires-Dist: whenever<0.9,>=0.8.2; extra == 'zzz-test-http'
76
+ Requires-Dist: whenever<0.9,>=0.8.4; extra == 'zzz-test-http'
77
77
  Provides-Extra: zzz-test-hypothesis
78
78
  Requires-Dist: aiosqlite<0.22,>=0.21.0; extra == 'zzz-test-hypothesis'
79
79
  Requires-Dist: asyncpg<0.31,>=0.30.0; extra == 'zzz-test-hypothesis'
80
80
  Requires-Dist: greenlet<3.3,>=3.2.0; extra == 'zzz-test-hypothesis'
81
- Requires-Dist: hypothesis<6.132,>=6.131.28; extra == 'zzz-test-hypothesis'
81
+ Requires-Dist: hypothesis<6.132,>=6.131.30; extra == 'zzz-test-hypothesis'
82
82
  Requires-Dist: luigi<3.7,>=3.6.0; extra == 'zzz-test-hypothesis'
83
83
  Requires-Dist: numpy<2.3,>=2.2.6; extra == 'zzz-test-hypothesis'
84
84
  Requires-Dist: pathvalidate<3.3,>=3.2.3; extra == 'zzz-test-hypothesis'
@@ -86,12 +86,12 @@ Requires-Dist: redis<6.2,>=6.1.0; extra == 'zzz-test-hypothesis'
86
86
  Requires-Dist: sqlalchemy<2.1,>=2.0.41; extra == 'zzz-test-hypothesis'
87
87
  Requires-Dist: tenacity<9.0,>=8.5.0; extra == 'zzz-test-hypothesis'
88
88
  Requires-Dist: tzlocal<5.4,>=5.3.1; extra == 'zzz-test-hypothesis'
89
- Requires-Dist: whenever<0.9,>=0.8.2; extra == 'zzz-test-hypothesis'
89
+ Requires-Dist: whenever<0.9,>=0.8.4; extra == 'zzz-test-hypothesis'
90
90
  Provides-Extra: zzz-test-ipython
91
91
  Requires-Dist: ipython<9.1,>=9.0.1; extra == 'zzz-test-ipython'
92
92
  Provides-Extra: zzz-test-iterables
93
93
  Requires-Dist: polars-lts-cpu<1.31,>=1.30.0; extra == 'zzz-test-iterables'
94
- Requires-Dist: whenever<0.9,>=0.8.2; extra == 'zzz-test-iterables'
94
+ Requires-Dist: whenever<0.9,>=0.8.4; extra == 'zzz-test-iterables'
95
95
  Provides-Extra: zzz-test-jupyter
96
96
  Requires-Dist: jupyterlab<4.3,>=4.2.0; extra == 'zzz-test-jupyter'
97
97
  Requires-Dist: pandas<2.3,>=2.2.2; extra == 'zzz-test-jupyter'
@@ -103,12 +103,12 @@ Requires-Dist: concurrent-log-handler<0.10,>=0.9.26; extra == 'zzz-test-logging'
103
103
  Requires-Dist: rich<14.1,>=14.0.0; extra == 'zzz-test-logging'
104
104
  Requires-Dist: tomlkit<0.14,>=0.13.2; extra == 'zzz-test-logging'
105
105
  Requires-Dist: tzlocal<5.4,>=5.3.1; extra == 'zzz-test-logging'
106
- Requires-Dist: whenever<0.9,>=0.8.2; extra == 'zzz-test-logging'
106
+ Requires-Dist: whenever<0.9,>=0.8.4; extra == 'zzz-test-logging'
107
107
  Provides-Extra: zzz-test-loguru
108
108
  Requires-Dist: loguru<0.8,>=0.7.3; extra == 'zzz-test-loguru'
109
109
  Provides-Extra: zzz-test-luigi
110
110
  Requires-Dist: luigi<3.7,>=3.6.0; extra == 'zzz-test-luigi'
111
- Requires-Dist: whenever<0.9,>=0.8.2; extra == 'zzz-test-luigi'
111
+ Requires-Dist: whenever<0.9,>=0.8.4; extra == 'zzz-test-luigi'
112
112
  Provides-Extra: zzz-test-math
113
113
  Requires-Dist: numpy<2.3,>=2.2.6; extra == 'zzz-test-math'
114
114
  Provides-Extra: zzz-test-memory-profiler
@@ -120,7 +120,7 @@ Provides-Extra: zzz-test-numpy
120
120
  Requires-Dist: numpy<2.3,>=2.2.6; extra == 'zzz-test-numpy'
121
121
  Provides-Extra: zzz-test-operator
122
122
  Requires-Dist: polars-lts-cpu<1.31,>=1.30.0; extra == 'zzz-test-operator'
123
- Requires-Dist: whenever<0.9,>=0.8.2; extra == 'zzz-test-operator'
123
+ Requires-Dist: whenever<0.9,>=0.8.4; extra == 'zzz-test-operator'
124
124
  Provides-Extra: zzz-test-optuna
125
125
  Requires-Dist: optuna<4.4,>=4.3.0; extra == 'zzz-test-optuna'
126
126
  Provides-Extra: zzz-test-orjson
@@ -128,7 +128,7 @@ Requires-Dist: orjson<3.11,>=3.10.15; extra == 'zzz-test-orjson'
128
128
  Requires-Dist: polars-lts-cpu<1.31,>=1.30.0; extra == 'zzz-test-orjson'
129
129
  Requires-Dist: rich<14.1,>=14.0.0; extra == 'zzz-test-orjson'
130
130
  Requires-Dist: tzlocal<5.4,>=5.3.1; extra == 'zzz-test-orjson'
131
- Requires-Dist: whenever<0.9,>=0.8.2; extra == 'zzz-test-orjson'
131
+ Requires-Dist: whenever<0.9,>=0.8.4; extra == 'zzz-test-orjson'
132
132
  Provides-Extra: zzz-test-os
133
133
  Provides-Extra: zzz-test-pathlib
134
134
  Provides-Extra: zzz-test-pickle
@@ -136,7 +136,7 @@ Requires-Dist: atomicwrites<1.5,>=1.4.1; extra == 'zzz-test-pickle'
136
136
  Provides-Extra: zzz-test-platform
137
137
  Provides-Extra: zzz-test-polars
138
138
  Requires-Dist: polars-lts-cpu<1.31,>=1.30.0; extra == 'zzz-test-polars'
139
- Requires-Dist: whenever<0.9,>=0.8.2; extra == 'zzz-test-polars'
139
+ Requires-Dist: whenever<0.9,>=0.8.4; extra == 'zzz-test-polars'
140
140
  Provides-Extra: zzz-test-pqdm
141
141
  Requires-Dist: pqdm<0.3,>=0.2.0; extra == 'zzz-test-pqdm'
142
142
  Provides-Extra: zzz-test-pydantic
@@ -151,12 +151,12 @@ Requires-Dist: pyrsistent<0.21,>=0.20.0; extra == 'zzz-test-pyrsistent'
151
151
  Provides-Extra: zzz-test-pytest
152
152
  Requires-Dist: atomicwrites<1.5,>=1.4.1; extra == 'zzz-test-pytest'
153
153
  Requires-Dist: orjson<3.11,>=3.10.18; extra == 'zzz-test-pytest'
154
- Requires-Dist: whenever<0.9,>=0.8.2; extra == 'zzz-test-pytest'
154
+ Requires-Dist: whenever<0.9,>=0.8.4; extra == 'zzz-test-pytest'
155
155
  Provides-Extra: zzz-test-pytest-regressions
156
156
  Requires-Dist: pytest-regressions<2.8,>=2.7.0; extra == 'zzz-test-pytest-regressions'
157
157
  Provides-Extra: zzz-test-python-dotenv
158
158
  Requires-Dist: python-dotenv<1.2,>=1.1.0; extra == 'zzz-test-python-dotenv'
159
- Requires-Dist: whenever<0.9,>=0.8.2; extra == 'zzz-test-python-dotenv'
159
+ Requires-Dist: whenever<0.9,>=0.8.4; extra == 'zzz-test-python-dotenv'
160
160
  Provides-Extra: zzz-test-random
161
161
  Provides-Extra: zzz-test-re
162
162
  Provides-Extra: zzz-test-redis
@@ -166,7 +166,7 @@ Requires-Dist: redis<6.2,>=6.1.0; extra == 'zzz-test-redis'
166
166
  Requires-Dist: rich<14.1,>=14.0.0; extra == 'zzz-test-redis'
167
167
  Requires-Dist: tenacity<9.0,>=8.5.0; extra == 'zzz-test-redis'
168
168
  Requires-Dist: tzlocal<5.4,>=5.3.1; extra == 'zzz-test-redis'
169
- Requires-Dist: whenever<0.9,>=0.8.2; extra == 'zzz-test-redis'
169
+ Requires-Dist: whenever<0.9,>=0.8.4; extra == 'zzz-test-redis'
170
170
  Provides-Extra: zzz-test-rich
171
171
  Requires-Dist: rich<14.1,>=14.0.0; extra == 'zzz-test-rich'
172
172
  Provides-Extra: zzz-test-scipy
@@ -174,7 +174,7 @@ Requires-Dist: scipy<1.16,>=1.15.3; extra == 'zzz-test-scipy'
174
174
  Provides-Extra: zzz-test-sentinel
175
175
  Provides-Extra: zzz-test-shelve
176
176
  Provides-Extra: zzz-test-slack-sdk
177
- Requires-Dist: aiohttp<3.12.1,>=3.12.0; extra == 'zzz-test-slack-sdk'
177
+ Requires-Dist: aiohttp<3.12.3,>=3.12.2; extra == 'zzz-test-slack-sdk'
178
178
  Requires-Dist: slack-sdk<3.36,>=3.35.0; extra == 'zzz-test-slack-sdk'
179
179
  Provides-Extra: zzz-test-socket
180
180
  Provides-Extra: zzz-test-sqlalchemy
@@ -192,7 +192,7 @@ Requires-Dist: nest-asyncio<1.7,>=1.6.0; extra == 'zzz-test-sqlalchemy-polars'
192
192
  Requires-Dist: polars-lts-cpu<1.31,>=1.30.0; extra == 'zzz-test-sqlalchemy-polars'
193
193
  Requires-Dist: sqlalchemy<2.1,>=2.0.41; extra == 'zzz-test-sqlalchemy-polars'
194
194
  Requires-Dist: tenacity<9.0,>=8.5.0; extra == 'zzz-test-sqlalchemy-polars'
195
- Requires-Dist: whenever<0.9,>=0.8.2; extra == 'zzz-test-sqlalchemy-polars'
195
+ Requires-Dist: whenever<0.9,>=0.8.4; extra == 'zzz-test-sqlalchemy-polars'
196
196
  Provides-Extra: zzz-test-streamlit
197
197
  Requires-Dist: streamlit<1.46,>=1.45.0; extra == 'zzz-test-streamlit'
198
198
  Provides-Extra: zzz-test-sys
@@ -200,7 +200,7 @@ Requires-Dist: atomicwrites<1.5,>=1.4.1; extra == 'zzz-test-sys'
200
200
  Requires-Dist: rich<14.1,>=14.0.0; extra == 'zzz-test-sys'
201
201
  Requires-Dist: tomlkit<0.14,>=0.13.2; extra == 'zzz-test-sys'
202
202
  Requires-Dist: tzlocal<5.4,>=5.3.1; extra == 'zzz-test-sys'
203
- Requires-Dist: whenever<0.9,>=0.8.2; extra == 'zzz-test-sys'
203
+ Requires-Dist: whenever<0.9,>=0.8.4; extra == 'zzz-test-sys'
204
204
  Provides-Extra: zzz-test-tempfile
205
205
  Provides-Extra: zzz-test-tenacity
206
206
  Requires-Dist: tenacity<9.0,>=8.5.0; extra == 'zzz-test-tenacity'
@@ -211,11 +211,11 @@ Provides-Extra: zzz-test-traceback
211
211
  Requires-Dist: rich<14.1,>=14.0.0; extra == 'zzz-test-traceback'
212
212
  Requires-Dist: tomlkit<0.14,>=0.13.2; extra == 'zzz-test-traceback'
213
213
  Requires-Dist: tzlocal<5.4,>=5.3.1; extra == 'zzz-test-traceback'
214
- Requires-Dist: whenever<0.9,>=0.8.2; extra == 'zzz-test-traceback'
214
+ Requires-Dist: whenever<0.9,>=0.8.4; extra == 'zzz-test-traceback'
215
215
  Provides-Extra: zzz-test-types
216
216
  Provides-Extra: zzz-test-typing
217
217
  Requires-Dist: polars-lts-cpu<1.31,>=1.30.0; extra == 'zzz-test-typing'
218
- Requires-Dist: whenever<0.9,>=0.8.2; extra == 'zzz-test-typing'
218
+ Requires-Dist: whenever<0.9,>=0.8.4; extra == 'zzz-test-typing'
219
219
  Provides-Extra: zzz-test-tzlocal
220
220
  Requires-Dist: tzlocal<5.4,>=5.3.1; extra == 'zzz-test-tzlocal'
221
221
  Provides-Extra: zzz-test-uuid
@@ -223,11 +223,11 @@ Provides-Extra: zzz-test-version
223
223
  Requires-Dist: tomlkit<0.14,>=0.13.2; extra == 'zzz-test-version'
224
224
  Provides-Extra: zzz-test-warnings
225
225
  Provides-Extra: zzz-test-whenever
226
- Requires-Dist: whenever<0.9,>=0.8.2; extra == 'zzz-test-whenever'
226
+ Requires-Dist: whenever<0.9,>=0.8.4; extra == 'zzz-test-whenever'
227
227
  Provides-Extra: zzz-test-zipfile
228
228
  Provides-Extra: zzz-test-zoneinfo
229
229
  Requires-Dist: tzdata<2025.3,>=2025.2; extra == 'zzz-test-zoneinfo'
230
- Requires-Dist: whenever<0.9,>=0.8.2; extra == 'zzz-test-zoneinfo'
230
+ Requires-Dist: whenever<0.9,>=0.8.4; extra == 'zzz-test-zoneinfo'
231
231
  Description-Content-Type: text/markdown
232
232
 
233
233
  [![PyPI version](https://badge.fury.io/py/dycw-utilities.svg)](https://badge.fury.io/py/dycw-utilities)
@@ -8,7 +8,7 @@ requires = ["hatchling"]
8
8
  # dependency groups
9
9
  [dependency-groups]
10
10
  dev = [
11
- "aiohttp >= 3.12.0, < 3.12.1", # for slack
11
+ "aiohttp >= 3.12.2, < 3.12.3", # for slack
12
12
  "aiosqlite >= 0.21.0, < 0.22",
13
13
  "altair >= 5.5.0, < 5.6",
14
14
  "asyncpg >= 0.30.0, < 0.31", # for sqlalchemy async
@@ -25,7 +25,7 @@ dev = [
25
25
  "fpdf2 >= 2.8.3, < 2.9",
26
26
  "greenlet >= 3.2.0, < 3.3", # for sqlalchemy async
27
27
  "httpx >= 0.28.1, < 0.29", # for fastapi
28
- "hypothesis >= 6.131.28, < 6.132",
28
+ "hypothesis >= 6.131.30, < 6.132",
29
29
  "img2pdf >= 0.6.0, < 0.7",
30
30
  "lightweight-charts >= 2.1, < 2.2",
31
31
  "loguru >= 0.7.3, < 0.8",
@@ -66,13 +66,13 @@ dev = [
66
66
  "vegafusion >= 2.0.2, < 2.1",
67
67
  "vegafusion-python-embed >= 1.6.9, < 1.7",
68
68
  "vl-convert-python >= 1.7.0, < 1.8",
69
- "whenever >= 0.8.2, < 0.9",
69
+ "whenever >= 0.8.4, < 0.9",
70
70
  # test
71
71
  "coverage-conditional-plugin >= 0.9.0, < 0.10",
72
72
  "pytest-asyncio >= 1.0.0, < 1.1",
73
73
  "pytest-cov >= 6.1.1, < 6.2",
74
74
  "pytest-instafail >= 0.5.0, < 0.6",
75
- "pytest-lazy-fixtures >= 1.1.3, < 1.2",
75
+ "pytest-lazy-fixtures >= 1.1.4, < 1.2",
76
76
  "pytest-only >= 2.1.2, < 2.2",
77
77
  "pytest-randomly >= 3.16.0, < 3.17",
78
78
  "pytest-rerunfailures >= 15.1, < 16",
@@ -93,16 +93,16 @@ dependencies = [
93
93
  name = "dycw-utilities"
94
94
  readme = "README.md"
95
95
  requires-python = ">= 3.12"
96
- version = "0.125.9"
96
+ version = "0.125.11"
97
97
 
98
98
  [project.optional-dependencies]
99
99
  test = [
100
- "hypothesis >= 6.131.28, < 6.132",
100
+ "hypothesis >= 6.131.30, < 6.132",
101
101
  "pytest >= 8.3.5, < 8.4",
102
102
  "pytest-asyncio >= 1.0.0, < 1.1",
103
103
  "pytest-cov >= 6.1.1, < 6.2",
104
104
  "pytest-instafail >= 0.5.0, < 0.6",
105
- "pytest-lazy-fixtures >= 1.1.3, < 1.2",
105
+ "pytest-lazy-fixtures >= 1.1.4, < 1.2",
106
106
  "pytest-only >= 2.1.2, < 2.2",
107
107
  "pytest-randomly >= 3.16.0, < 3.17",
108
108
  "pytest-regressions >= 2.7.0, < 2.8",
@@ -118,7 +118,7 @@ zzz-test-altair = [
118
118
  "img2pdf >= 0.6.0, < 0.7",
119
119
  "polars-lts-cpu >= 1.30.0, < 1.31",
120
120
  "vl-convert-python >= 1.7.0, < 1.8",
121
- "whenever >= 0.8.2, < 0.9",
121
+ "whenever >= 0.8.4, < 0.9",
122
122
  ]
123
123
  zzz-test-asyncio = []
124
124
  zzz-test-atomicwrites = ["atomicwrites >= 1.4.1, < 1.5"]
@@ -129,7 +129,7 @@ zzz-test-cachetools = ["cachetools >= 5.5.2, < 5.6"]
129
129
  zzz-test-click = [
130
130
  "click >= 8.2.1, < 8.3",
131
131
  "sqlalchemy >= 2.0.41, < 2.1",
132
- "whenever >= 0.8.2, < 0.9",
132
+ "whenever >= 0.8.4, < 0.9",
133
133
  ]
134
134
  zzz-test-contextlib = []
135
135
  zzz-test-contextvars = []
@@ -138,11 +138,11 @@ zzz-test-cvxpy = ["cvxpy >= 1.6.5, < 1.7"]
138
138
  zzz-test-dataclasses = [
139
139
  "orjson >= 3.10.15, < 3.11",
140
140
  "polars-lts-cpu >= 1.30.0, < 1.31",
141
- "whenever >= 0.8.2, < 0.9",
141
+ "whenever >= 0.8.4, < 0.9",
142
142
  ]
143
143
  zzz-test-datetime = [
144
144
  "tzlocal >= 5.3.1, < 5.4",
145
- "whenever >= 0.8.2, < 0.9",
145
+ "whenever >= 0.8.4, < 0.9",
146
146
  ]
147
147
  zzz-test-enum = []
148
148
  zzz-test-errors = []
@@ -163,18 +163,18 @@ zzz-test-git = []
163
163
  zzz-test-hashlib = [
164
164
  "polars-lts-cpu >= 1.30.0, < 1.31",
165
165
  "orjson >= 3.10.15, < 3.11",
166
- "whenever >= 0.8.2, < 0.9",
166
+ "whenever >= 0.8.4, < 0.9",
167
167
  ]
168
168
  zzz-test-http = [
169
169
  "atomicwrites >= 1.4.1, < 1.5",
170
170
  "orjson >= 3.10.18, < 3.11",
171
- "whenever >= 0.8.2, < 0.9",
171
+ "whenever >= 0.8.4, < 0.9",
172
172
  ]
173
173
  zzz-test-hypothesis = [
174
174
  "aiosqlite >= 0.21.0, < 0.22",
175
175
  "asyncpg >= 0.30.0, < 0.31", # for sqlalchemy async
176
176
  "greenlet >= 3.2.0, < 3.3", # for sqlalchemy async
177
- "hypothesis >= 6.131.28, < 6.132",
177
+ "hypothesis >= 6.131.30, < 6.132",
178
178
  "luigi >= 3.6.0, < 3.7",
179
179
  "numpy >= 2.2.6, < 2.3",
180
180
  "pathvalidate >= 3.2.3, < 3.3",
@@ -182,12 +182,12 @@ zzz-test-hypothesis = [
182
182
  "sqlalchemy >= 2.0.41, < 2.1",
183
183
  "tenacity >= 8.5.0, < 9.0", # limited by luigi
184
184
  "tzlocal >= 5.3.1, < 5.4",
185
- "whenever >= 0.8.2, < 0.9",
185
+ "whenever >= 0.8.4, < 0.9",
186
186
  ]
187
187
  zzz-test-ipython = ["ipython >= 9.0.1, < 9.1"]
188
188
  zzz-test-iterables = [
189
189
  "polars-lts-cpu >= 1.30.0, < 1.31",
190
- "whenever >= 0.8.2, < 0.9",
190
+ "whenever >= 0.8.4, < 0.9",
191
191
  ]
192
192
  zzz-test-jupyter = [
193
193
  "jupyterlab >= 4.2.0, < 4.3",
@@ -201,12 +201,12 @@ zzz-test-logging = [
201
201
  "rich >= 14.0.0, < 14.1",
202
202
  "tomlkit >= 0.13.2, < 0.14",
203
203
  "tzlocal >= 5.3.1, < 5.4",
204
- "whenever >= 0.8.2, < 0.9",
204
+ "whenever >= 0.8.4, < 0.9",
205
205
  ]
206
206
  zzz-test-loguru = ["loguru >= 0.7.3, < 0.8"]
207
207
  zzz-test-luigi = [
208
208
  "luigi >= 3.6.0, < 3.7",
209
- "whenever >= 0.8.2, < 0.9",
209
+ "whenever >= 0.8.4, < 0.9",
210
210
  ]
211
211
  zzz-test-math = ["numpy >= 2.2.6, < 2.3"]
212
212
  zzz-test-memory-profiler = ["memory-profiler >= 0.61.0, < 0.62"]
@@ -215,7 +215,7 @@ zzz-test-more-itertools = ["more-itertools >= 10.7.0, < 10.8"]
215
215
  zzz-test-numpy = ["numpy >= 2.2.6, < 2.3"]
216
216
  zzz-test-operator = [
217
217
  "polars-lts-cpu >= 1.30.0, < 1.31",
218
- "whenever >= 0.8.2, < 0.9",
218
+ "whenever >= 0.8.4, < 0.9",
219
219
  ]
220
220
  zzz-test-optuna = ["optuna >= 4.3.0, < 4.4"]
221
221
  zzz-test-orjson = [
@@ -223,7 +223,7 @@ zzz-test-orjson = [
223
223
  "polars-lts-cpu >= 1.30.0, < 1.31",
224
224
  "rich >= 14.0.0, < 14.1",
225
225
  "tzlocal >= 5.3.1, < 5.4",
226
- "whenever >= 0.8.2, < 0.9",
226
+ "whenever >= 0.8.4, < 0.9",
227
227
  ]
228
228
  zzz-test-os = []
229
229
  zzz-test-pathlib = []
@@ -231,7 +231,7 @@ zzz-test-pickle = ["atomicwrites >= 1.4.1, < 1.5"]
231
231
  zzz-test-platform = []
232
232
  zzz-test-polars = [
233
233
  "polars-lts-cpu >= 1.30.0, < 1.31",
234
- "whenever >= 0.8.2, < 0.9",
234
+ "whenever >= 0.8.4, < 0.9",
235
235
  ]
236
236
  zzz-test-pqdm = ["pqdm >= 0.2.0, < 0.3"]
237
237
  zzz-test-pydantic = [
@@ -247,12 +247,12 @@ zzz-test-pyrsistent = ["pyrsistent >= 0.20.0, < 0.21"]
247
247
  zzz-test-pytest = [
248
248
  "atomicwrites >= 1.4.1, < 1.5",
249
249
  "orjson >= 3.10.18, < 3.11",
250
- "whenever >= 0.8.2, < 0.9",
250
+ "whenever >= 0.8.4, < 0.9",
251
251
  ]
252
252
  zzz-test-pytest-regressions = ["pytest-regressions >= 2.7.0, < 2.8"]
253
253
  zzz-test-python-dotenv = [
254
254
  "python-dotenv >= 1.1.0, < 1.2",
255
- "whenever >= 0.8.2, < 0.9",
255
+ "whenever >= 0.8.4, < 0.9",
256
256
  ]
257
257
  zzz-test-random = []
258
258
  zzz-test-re = []
@@ -263,14 +263,14 @@ zzz-test-redis = [
263
263
  "rich >= 14.0.0, < 14.1",
264
264
  "tenacity >= 8.5.0, < 9.0", # limited by luigi
265
265
  "tzlocal >= 5.3.1, < 5.4",
266
- "whenever >= 0.8.2, < 0.9",
266
+ "whenever >= 0.8.4, < 0.9",
267
267
  ]
268
268
  zzz-test-rich = ["rich >= 14.0.0, < 14.1"]
269
269
  zzz-test-scipy = ["scipy >= 1.15.3, < 1.16"]
270
270
  zzz-test-sentinel = []
271
271
  zzz-test-shelve = []
272
272
  zzz-test-slack-sdk = [
273
- "aiohttp >= 3.12.0, < 3.12.1", # for slack
273
+ "aiohttp >= 3.12.2, < 3.12.3", # for slack
274
274
  "slack-sdk >= 3.35.0, < 3.36",
275
275
  ]
276
276
  zzz-test-socket = []
@@ -290,7 +290,7 @@ zzz-test-sqlalchemy-polars = [
290
290
  "polars-lts-cpu >= 1.30.0, < 1.31",
291
291
  "sqlalchemy >= 2.0.41, < 2.1",
292
292
  "tenacity >= 8.5.0, < 9.0", # limited by luigi
293
- "whenever >= 0.8.2, < 0.9",
293
+ "whenever >= 0.8.4, < 0.9",
294
294
  ]
295
295
  zzz-test-streamlit = ["streamlit >= 1.45.0, < 1.46"]
296
296
  zzz-test-sys = [
@@ -298,7 +298,7 @@ zzz-test-sys = [
298
298
  "rich >= 14.0.0, < 14.1",
299
299
  "tomlkit >= 0.13.2, < 0.14",
300
300
  "tzlocal >= 5.3.1, < 5.4",
301
- "whenever >= 0.8.2, < 0.9",
301
+ "whenever >= 0.8.4, < 0.9",
302
302
  ]
303
303
  zzz-test-tempfile = []
304
304
  zzz-test-tenacity = [
@@ -311,22 +311,22 @@ zzz-test-traceback = [
311
311
  "rich >= 14.0.0, < 14.1",
312
312
  "tomlkit >= 0.13.2, < 0.14",
313
313
  "tzlocal >= 5.3.1, < 5.4",
314
- "whenever >= 0.8.2, < 0.9",
314
+ "whenever >= 0.8.4, < 0.9",
315
315
  ]
316
316
  zzz-test-types = []
317
317
  zzz-test-typing = [
318
318
  "polars-lts-cpu >= 1.30.0, < 1.31",
319
- "whenever >= 0.8.2, < 0.9",
319
+ "whenever >= 0.8.4, < 0.9",
320
320
  ]
321
321
  zzz-test-tzlocal = ["tzlocal >= 5.3.1, < 5.4"]
322
322
  zzz-test-uuid = []
323
323
  zzz-test-version = ["tomlkit >= 0.13.2, < 0.14"]
324
324
  zzz-test-warnings = []
325
- zzz-test-whenever = ["whenever >= 0.8.2, < 0.9"]
325
+ zzz-test-whenever = ["whenever >= 0.8.4, < 0.9"]
326
326
  zzz-test-zipfile = []
327
327
  zzz-test-zoneinfo = [
328
328
  "tzdata >= 2025.2, < 2025.3",
329
- "whenever >= 0.8.2, < 0.9",
329
+ "whenever >= 0.8.4, < 0.9",
330
330
  ]
331
331
 
332
332
  [project.scripts]
@@ -334,7 +334,7 @@ zzz-test-zoneinfo = [
334
334
  # bump-my-version
335
335
  [tool.bumpversion]
336
336
  allow_dirty = true
337
- current_version = "0.125.9"
337
+ current_version = "0.125.11"
338
338
 
339
339
  [[tool.bumpversion.files]]
340
340
  filename = "src/utilities/__init__.py"
@@ -69,6 +69,9 @@ from utilities.iterables import (
69
69
  _ApplyBijectionDuplicateValuesError,
70
70
  _CheckUniqueModuloCaseDuplicateLowerCaseStringsError,
71
71
  _CheckUniqueModuloCaseDuplicateStringsError,
72
+ _RangePartitionsNumError,
73
+ _RangePartitionsStopError,
74
+ _RangePartitionsTotalError,
72
75
  _sort_iterable_cmp_datetimes,
73
76
  _sort_iterable_cmp_floats,
74
77
  always_iterable,
@@ -114,6 +117,7 @@ from utilities.iterables import (
114
117
  one_unique,
115
118
  pairwise_tail,
116
119
  product_dicts,
120
+ range_partitions,
117
121
  reduce_mappings,
118
122
  resolve_include_and_exclude,
119
123
  sort_iterable,
@@ -1091,6 +1095,66 @@ class TestProductDicts:
1091
1095
  assert result == expected
1092
1096
 
1093
1097
 
1098
+ class TestRangePartitions:
1099
+ @given(
1100
+ case=sampled_from([
1101
+ (1, 0, 1, [0]),
1102
+ (2, 0, 1, [0, 1]),
1103
+ (2, 0, 2, [0]),
1104
+ (2, 1, 2, [1]),
1105
+ (3, 0, 1, [0, 1, 2]),
1106
+ (3, 0, 2, [0, 1]),
1107
+ (3, 1, 2, [2]),
1108
+ (3, 0, 3, [0]),
1109
+ (3, 1, 3, [1]),
1110
+ (3, 2, 3, [2]),
1111
+ (6, 0, 1, [0, 1, 2, 3, 4, 5]),
1112
+ (6, 0, 2, [0, 1, 2]),
1113
+ (6, 1, 2, [3, 4, 5]),
1114
+ (6, 0, 3, [0, 1]),
1115
+ (6, 1, 3, [2, 3]),
1116
+ (6, 2, 3, [4, 5]),
1117
+ (7, 0, 2, [0, 1, 2, 3]),
1118
+ (7, 1, 2, [4, 5, 6]),
1119
+ (7, 0, 3, [0, 1, 2]),
1120
+ (7, 1, 3, [3, 4]),
1121
+ (7, 2, 3, [5, 6]),
1122
+ ])
1123
+ )
1124
+ def test_main(self, *, case: tuple[int, int, int, Sequence[int]]) -> None:
1125
+ stop, num, total, expected = case
1126
+ result = list(range_partitions(stop, num, total))
1127
+ assert result == expected
1128
+
1129
+ def test_error_stop(self) -> None:
1130
+ with raises(_RangePartitionsStopError, match="'stop' must be positive; got 0"):
1131
+ _ = range_partitions(0, 0, 0)
1132
+
1133
+ def test_error_total_too_low(self) -> None:
1134
+ with raises(
1135
+ _RangePartitionsTotalError, match=r"'total' must be in \[1, 1\]; got 0"
1136
+ ):
1137
+ _ = range_partitions(1, 0, 0)
1138
+
1139
+ def test_error_total_too_high(self) -> None:
1140
+ with raises(
1141
+ _RangePartitionsTotalError, match=r"'total' must be in \[1, 1\]; got 2"
1142
+ ):
1143
+ _ = range_partitions(1, 0, 2)
1144
+
1145
+ def test_error_num_too_low(self) -> None:
1146
+ with raises(
1147
+ _RangePartitionsNumError, match=r"'num' must be in \[0, 1\]; got -1"
1148
+ ):
1149
+ _ = range_partitions(2, -1, 2)
1150
+
1151
+ def test_error_num_too_high(self) -> None:
1152
+ with raises(
1153
+ _RangePartitionsNumError, match=r"'num' must be in \[0, 1\]; got 2"
1154
+ ):
1155
+ _ = range_partitions(2, 2, 2)
1156
+
1157
+
1094
1158
  class TestReduceMappings:
1095
1159
  @given(
1096
1160
  mappings=lists(dictionaries(text_ascii(), integers())),
@@ -1,3 +1,3 @@
1
1
  from __future__ import annotations
2
2
 
3
- __version__ = "0.125.9"
3
+ __version__ = "0.125.11"
@@ -1190,6 +1190,56 @@ def product_dicts(mapping: Mapping[_K, Iterable[_V]], /) -> Iterator[Mapping[_K,
1190
1190
  ##
1191
1191
 
1192
1192
 
1193
+ def range_partitions(stop: int, num: int, total: int, /) -> range:
1194
+ """Partition a range."""
1195
+ if stop <= 0:
1196
+ raise _RangePartitionsStopError(stop=stop)
1197
+ if not (1 <= total <= stop):
1198
+ raise _RangePartitionsTotalError(stop=stop, total=total)
1199
+ if not (0 <= num < total):
1200
+ raise _RangePartitionsNumError(num=num, total=total)
1201
+ q, r = divmod(stop, total)
1202
+ start = num * q + min(num, r)
1203
+ end = start + q + (1 if num < r else 0)
1204
+ return range(start, end)
1205
+
1206
+
1207
+ @dataclass(kw_only=True, slots=True)
1208
+ class RangePartitionsError(Exception): ...
1209
+
1210
+
1211
+ @dataclass(kw_only=True, slots=True)
1212
+ class _RangePartitionsStopError(RangePartitionsError):
1213
+ stop: int
1214
+
1215
+ @override
1216
+ def __str__(self) -> str:
1217
+ return f"'stop' must be positive; got {self.stop}"
1218
+
1219
+
1220
+ @dataclass(kw_only=True, slots=True)
1221
+ class _RangePartitionsTotalError(RangePartitionsError):
1222
+ stop: int
1223
+ total: int
1224
+
1225
+ @override
1226
+ def __str__(self) -> str:
1227
+ return f"'total' must be in [1, {self.stop}]; got {self.total}"
1228
+
1229
+
1230
+ @dataclass(kw_only=True, slots=True)
1231
+ class _RangePartitionsNumError(RangePartitionsError):
1232
+ num: int
1233
+ total: int
1234
+
1235
+ @override
1236
+ def __str__(self) -> str:
1237
+ return f"'num' must be in [0, {self.total - 1}]; got {self.num}"
1238
+
1239
+
1240
+ ##
1241
+
1242
+
1193
1243
  @overload
1194
1244
  def reduce_mappings(
1195
1245
  func: Callable[[_V, _V], _V], sequence: Iterable[Mapping[_K, _V]], /
@@ -1458,6 +1508,7 @@ __all__ = [
1458
1508
  "OneUniqueEmptyError",
1459
1509
  "OneUniqueError",
1460
1510
  "OneUniqueNonUniqueError",
1511
+ "RangePartitionsError",
1461
1512
  "ResolveIncludeAndExcludeError",
1462
1513
  "SortIterableError",
1463
1514
  "always_iterable",
@@ -1502,6 +1553,7 @@ __all__ = [
1502
1553
  "one_unique",
1503
1554
  "pairwise_tail",
1504
1555
  "product_dicts",
1556
+ "range_partitions",
1505
1557
  "reduce_mappings",
1506
1558
  "resolve_include_and_exclude",
1507
1559
  "sort_iterable",