dycw-utilities 0.129.11__tar.gz → 0.129.13__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 (232) hide show
  1. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/PKG-INFO +9 -7
  2. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/pyproject.toml +17 -11
  3. dycw_utilities-0.129.13/src/tests/test_aiolimiter.py +39 -0
  4. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_pathlib.py +21 -0
  5. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/__init__.py +1 -1
  6. dycw_utilities-0.129.13/src/utilities/aiolimiter.py +25 -0
  7. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/pathlib.py +12 -1
  8. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/scipy.py +1 -1
  9. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/.gitignore +0 -0
  10. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/LICENSE +0 -0
  11. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/README.md +0 -0
  12. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/__init__.py +0 -0
  13. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/conftest.py +0 -0
  14. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/modules/__init__.py +0 -0
  15. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/modules/package_missing/__init__.py +0 -0
  16. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/modules/package_missing/module.py +0 -0
  17. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/modules/package_with/__init__.py +0 -0
  18. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/modules/package_with/outer_1.py +0 -0
  19. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/modules/package_with/outer_2.py +0 -0
  20. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
  21. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
  22. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
  23. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
  24. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/modules/package_without/__init__.py +0 -0
  25. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/modules/package_without/module_1.py +0 -0
  26. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/modules/package_without/module_2.py +0 -0
  27. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/modules/standalone.py +0 -0
  28. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/modules/with_imports.py +0 -0
  29. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
  30. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
  31. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
  32. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
  33. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
  34. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
  35. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
  36. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
  37. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_altair.py +0 -0
  38. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_asyncio.py +0 -0
  39. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_asyncio_classes/__init__.py +0 -0
  40. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_asyncio_classes/loopers.py +0 -0
  41. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_asyncio_classes/redis.py +0 -0
  42. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_atomicwrites.py +0 -0
  43. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_atools.py +0 -0
  44. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_cachetools.py +0 -0
  45. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_click.py +0 -0
  46. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_concurrent.py +0 -0
  47. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_contextlib.py +0 -0
  48. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_contextvars.py +0 -0
  49. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_cryptography.py +0 -0
  50. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_cvxpy.py +0 -0
  51. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_dataclasses.py +0 -0
  52. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_datetime.py +0 -0
  53. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_enum.py +0 -0
  54. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_errors.py +0 -0
  55. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_eventkit.py +0 -0
  56. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_fastapi.py +0 -0
  57. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_fpdf2.py +0 -0
  58. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_functions.py +0 -0
  59. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_functools.py +0 -0
  60. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_getpass.py +0 -0
  61. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_git.py +0 -0
  62. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_hashlib.py +0 -0
  63. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_http.py +0 -0
  64. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_hypothesis.py +0 -0
  65. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_importlib.py +0 -0
  66. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_ipython.py +0 -0
  67. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_iterables.py +0 -0
  68. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_jupyter.py +0 -0
  69. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_libcst.py +0 -0
  70. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_lightweight_charts.py +0 -0
  71. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_logging.py +0 -0
  72. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_loguru.py +0 -0
  73. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_luigi.py +0 -0
  74. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_math.py +0 -0
  75. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_memory_profiler.py +0 -0
  76. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_modules.py +0 -0
  77. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_more_itertools.py +0 -0
  78. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_numpy.py +0 -0
  79. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_operator.py +0 -0
  80. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_optuna.py +0 -0
  81. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_orjson.py +0 -0
  82. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_os.py +0 -0
  83. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_parse.py +0 -0
  84. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_period.py +0 -0
  85. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_pickle.py +0 -0
  86. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_platform.py +0 -0
  87. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_polars.py +0 -0
  88. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_polars_ols.py +0 -0
  89. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_pottery.py +0 -0
  90. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_pqdm.py +0 -0
  91. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_psutil.py +0 -0
  92. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_pydantic.py +0 -0
  93. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_pyinstrument.py +0 -0
  94. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_pyrsistent.py +0 -0
  95. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_pytest.py +0 -0
  96. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_pytest_regressions.py +0 -0
  97. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_python_dotenv.py +0 -0
  98. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_random.py +0 -0
  99. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_re.py +0 -0
  100. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_redis.py +0 -0
  101. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_reprlib.py +0 -0
  102. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_scipy.py +0 -0
  103. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_sentinel.py +0 -0
  104. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_shelve.py +0 -0
  105. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_slack_sdk.py +0 -0
  106. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_socket.py +0 -0
  107. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_sqlalchemy.py +0 -0
  108. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_sqlalchemy_polars.py +0 -0
  109. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_statsmodel.py +0 -0
  110. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_streamlit.py +0 -0
  111. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_string.py +0 -0
  112. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_sys.py +0 -0
  113. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_tempfile.py +0 -0
  114. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_tenacity.py +0 -0
  115. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_text.py +0 -0
  116. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_threading.py +0 -0
  117. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_timer.py +0 -0
  118. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_traceback.py +0 -0
  119. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_traceback_funcs/__init__.py +0 -0
  120. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_traceback_funcs/chain.py +0 -0
  121. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_traceback_funcs/decorated_async.py +0 -0
  122. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_traceback_funcs/decorated_sync.py +0 -0
  123. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_traceback_funcs/error_bind.py +0 -0
  124. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_traceback_funcs/many.py +0 -0
  125. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_traceback_funcs/one.py +0 -0
  126. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_traceback_funcs/recursive.py +0 -0
  127. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_traceback_funcs/task_group_one.py +0 -0
  128. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_traceback_funcs/task_group_two.py +0 -0
  129. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_traceback_funcs/two.py +0 -0
  130. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_traceback_funcs/untraced.py +0 -0
  131. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_types.py +0 -0
  132. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_typing.py +0 -0
  133. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_typing_funcs/__init__.py +0 -0
  134. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_typing_funcs/no_future.py +0 -0
  135. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_typing_funcs/with_future.py +0 -0
  136. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_tzdata.py +0 -0
  137. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_tzlocal.py +0 -0
  138. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_uuid.py +0 -0
  139. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_version.py +0 -0
  140. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_warnings.py +0 -0
  141. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_whenever.py +0 -0
  142. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_zipfile.py +0 -0
  143. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/tests/test_zoneinfo.py +0 -0
  144. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/altair.py +0 -0
  145. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/asyncio.py +0 -0
  146. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/atomicwrites.py +0 -0
  147. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/atools.py +0 -0
  148. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/cachetools.py +0 -0
  149. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/click.py +0 -0
  150. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/concurrent.py +0 -0
  151. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/contextlib.py +0 -0
  152. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/contextvars.py +0 -0
  153. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/cryptography.py +0 -0
  154. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/cvxpy.py +0 -0
  155. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/dataclasses.py +0 -0
  156. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/datetime.py +0 -0
  157. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/enum.py +0 -0
  158. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/errors.py +0 -0
  159. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/eventkit.py +0 -0
  160. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/fastapi.py +0 -0
  161. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/fpdf2.py +0 -0
  162. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/functions.py +0 -0
  163. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/functools.py +0 -0
  164. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/getpass.py +0 -0
  165. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/git.py +0 -0
  166. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/hashlib.py +0 -0
  167. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/http.py +0 -0
  168. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/hypothesis.py +0 -0
  169. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/importlib.py +0 -0
  170. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/ipython.py +0 -0
  171. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/iterables.py +0 -0
  172. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/jupyter.py +0 -0
  173. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/libcst.py +0 -0
  174. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/lightweight_charts.py +0 -0
  175. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/logging.py +0 -0
  176. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/loguru.py +0 -0
  177. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/luigi.py +0 -0
  178. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/math.py +0 -0
  179. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/memory_profiler.py +0 -0
  180. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/modules.py +0 -0
  181. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/more_itertools.py +0 -0
  182. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/numpy.py +0 -0
  183. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/operator.py +0 -0
  184. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/optuna.py +0 -0
  185. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/orjson.py +0 -0
  186. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/os.py +0 -0
  187. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/parse.py +0 -0
  188. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/period.py +0 -0
  189. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/pickle.py +0 -0
  190. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/platform.py +0 -0
  191. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/polars.py +0 -0
  192. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/polars_ols.py +0 -0
  193. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/pottery.py +0 -0
  194. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/pqdm.py +0 -0
  195. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/psutil.py +0 -0
  196. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/py.typed +0 -0
  197. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/pydantic.py +0 -0
  198. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/pyinstrument.py +0 -0
  199. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/pyrsistent.py +0 -0
  200. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/pytest.py +0 -0
  201. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/pytest_regressions.py +0 -0
  202. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/python_dotenv.py +0 -0
  203. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/random.py +0 -0
  204. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/re.py +0 -0
  205. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/redis.py +0 -0
  206. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/reprlib.py +0 -0
  207. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/sentinel.py +0 -0
  208. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/shelve.py +0 -0
  209. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/slack_sdk.py +0 -0
  210. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/socket.py +0 -0
  211. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/sqlalchemy.py +0 -0
  212. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/sqlalchemy_polars.py +0 -0
  213. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/statsmodels.py +0 -0
  214. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/streamlit.py +0 -0
  215. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/string.py +0 -0
  216. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/sys.py +0 -0
  217. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/tempfile.py +0 -0
  218. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/tenacity.py +0 -0
  219. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/text.py +0 -0
  220. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/threading.py +0 -0
  221. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/timer.py +0 -0
  222. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/traceback.py +0 -0
  223. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/types.py +0 -0
  224. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/typing.py +0 -0
  225. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/tzdata.py +0 -0
  226. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/tzlocal.py +0 -0
  227. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/uuid.py +0 -0
  228. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/version.py +0 -0
  229. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/warnings.py +0 -0
  230. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/whenever.py +0 -0
  231. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/zipfile.py +0 -0
  232. {dycw_utilities-0.129.11 → dycw_utilities-0.129.13}/src/utilities/zoneinfo.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dycw-utilities
3
- Version: 0.129.11
3
+ Version: 0.129.13
4
4
  Author-email: Derek Wan <d.wan@icloud.com>
5
5
  License-File: LICENSE
6
6
  Requires-Python: >=3.12
@@ -12,7 +12,7 @@ Requires-Dist: tzlocal<5.4,>=5.3.1; extra == 'logging'
12
12
  Requires-Dist: whenever<0.9,>=0.8.4; extra == 'logging'
13
13
  Provides-Extra: test
14
14
  Requires-Dist: dycw-pytest-only<2.2,>=2.1.1; extra == 'test'
15
- Requires-Dist: hypothesis<6.136,>=6.135.0; extra == 'test'
15
+ Requires-Dist: hypothesis<6.136,>=6.135.2; extra == 'test'
16
16
  Requires-Dist: pytest-asyncio<1.1,>=1.0.0; extra == 'test'
17
17
  Requires-Dist: pytest-cov<6.2,>=6.1.1; extra == 'test'
18
18
  Requires-Dist: pytest-instafail<0.6,>=0.5.0; extra == 'test'
@@ -24,6 +24,8 @@ Requires-Dist: pytest-rng<1.1,>=1.0.0; extra == 'test'
24
24
  Requires-Dist: pytest-timeout<2.5,>=2.4.0; extra == 'test'
25
25
  Requires-Dist: pytest-xdist<3.8,>=3.7.0; extra == 'test'
26
26
  Requires-Dist: pytest<8.4,>=8.3.5; extra == 'test'
27
+ Provides-Extra: zzz-test-aiolimiter
28
+ Requires-Dist: aiolimiter<1.3,>=1.2.1; extra == 'zzz-test-aiolimiter'
27
29
  Provides-Extra: zzz-test-altair
28
30
  Requires-Dist: altair<5.6,>=5.5.0; extra == 'zzz-test-altair'
29
31
  Requires-Dist: atomicwrites<1.5,>=1.4.1; extra == 'zzz-test-altair'
@@ -82,9 +84,9 @@ Provides-Extra: zzz-test-hypothesis
82
84
  Requires-Dist: aiosqlite<0.22,>=0.21.0; extra == 'zzz-test-hypothesis'
83
85
  Requires-Dist: asyncpg<0.31,>=0.30.0; extra == 'zzz-test-hypothesis'
84
86
  Requires-Dist: greenlet<3.3,>=3.2.0; extra == 'zzz-test-hypothesis'
85
- Requires-Dist: hypothesis<6.136,>=6.135.0; extra == 'zzz-test-hypothesis'
87
+ Requires-Dist: hypothesis<6.136,>=6.135.2; extra == 'zzz-test-hypothesis'
86
88
  Requires-Dist: luigi<3.7,>=3.6.0; extra == 'zzz-test-hypothesis'
87
- Requires-Dist: numpy<2.3,>=2.2.6; extra == 'zzz-test-hypothesis'
89
+ Requires-Dist: numpy<2.4,>=2.3.0; extra == 'zzz-test-hypothesis'
88
90
  Requires-Dist: pathvalidate<3.3,>=3.2.3; extra == 'zzz-test-hypothesis'
89
91
  Requires-Dist: redis<6.3,>=6.2.0; extra == 'zzz-test-hypothesis'
90
92
  Requires-Dist: sqlalchemy<2.1,>=2.0.41; extra == 'zzz-test-hypothesis'
@@ -113,14 +115,14 @@ Provides-Extra: zzz-test-luigi
113
115
  Requires-Dist: luigi<3.7,>=3.6.0; extra == 'zzz-test-luigi'
114
116
  Requires-Dist: whenever<0.9,>=0.8.4; extra == 'zzz-test-luigi'
115
117
  Provides-Extra: zzz-test-math
116
- Requires-Dist: numpy<2.3,>=2.2.6; extra == 'zzz-test-math'
118
+ Requires-Dist: numpy<2.4,>=2.3.0; extra == 'zzz-test-math'
117
119
  Provides-Extra: zzz-test-memory-profiler
118
120
  Requires-Dist: memory-profiler<0.62,>=0.61.0; extra == 'zzz-test-memory-profiler'
119
121
  Provides-Extra: zzz-test-modules
120
122
  Provides-Extra: zzz-test-more-itertools
121
123
  Requires-Dist: more-itertools<10.8,>=10.7.0; extra == 'zzz-test-more-itertools'
122
124
  Provides-Extra: zzz-test-numpy
123
- Requires-Dist: numpy<2.3,>=2.2.6; extra == 'zzz-test-numpy'
125
+ Requires-Dist: numpy<2.4,>=2.3.0; extra == 'zzz-test-numpy'
124
126
  Provides-Extra: zzz-test-operator
125
127
  Requires-Dist: polars-lts-cpu<1.31,>=1.30.0; extra == 'zzz-test-operator'
126
128
  Requires-Dist: whenever<0.9,>=0.8.4; extra == 'zzz-test-operator'
@@ -177,7 +179,7 @@ Requires-Dist: scipy<1.16,>=1.15.3; extra == 'zzz-test-scipy'
177
179
  Provides-Extra: zzz-test-sentinel
178
180
  Provides-Extra: zzz-test-shelve
179
181
  Provides-Extra: zzz-test-slack-sdk
180
- Requires-Dist: aiohttp<3.12.10,>=3.12.9; extra == 'zzz-test-slack-sdk'
182
+ Requires-Dist: aiohttp<3.13,>=3.12.11; extra == 'zzz-test-slack-sdk'
181
183
  Requires-Dist: slack-sdk<3.36,>=3.35.0; extra == 'zzz-test-slack-sdk'
182
184
  Provides-Extra: zzz-test-socket
183
185
  Provides-Extra: zzz-test-sqlalchemy
@@ -8,7 +8,8 @@ requires = ["hatchling"]
8
8
  # dependency groups
9
9
  [dependency-groups]
10
10
  dev = [
11
- "aiohttp >= 3.12.9, < 3.12.10", # for slack
11
+ "aiohttp >= 3.12.11, < 3.13", # for slack
12
+ "aiolimiter >= 1.2.1, < 1.3",
12
13
  "aiosqlite >= 0.21.0, < 0.22",
13
14
  "altair >= 5.5.0, < 5.6",
14
15
  "asyncpg >= 0.30.0, < 0.31", # for sqlalchemy async
@@ -24,7 +25,7 @@ dev = [
24
25
  "fpdf2 >= 2.8.3, < 2.9",
25
26
  "greenlet >= 3.2.0, < 3.3", # for sqlalchemy async
26
27
  "httpx >= 0.28.1, < 0.29", # for fastapi
27
- "hypothesis >= 6.135.0, < 6.136",
28
+ "hypothesis >= 6.135.2, < 6.136",
28
29
  "img2pdf >= 0.6.0, < 0.7",
29
30
  "lightweight-charts >= 2.1, < 2.2",
30
31
  "loguru >= 0.7.3, < 0.8",
@@ -33,7 +34,7 @@ dev = [
33
34
  "more-itertools >= 10.7.0, < 10.8",
34
35
  "nest-asyncio >= 1.6.0, < 1.7", # for sqlalchemy async
35
36
  "nox >= 2025.2.9, < 2025.3",
36
- "numpy >= 2.2.6, < 2.3",
37
+ "numpy >= 2.3.0, < 2.4",
37
38
  "libcst >= 1.8.0, < 1.9",
38
39
  "optuna >= 4.3.0, < 4.4",
39
40
  "orjson >= 3.10.18, < 3.11",
@@ -82,6 +83,7 @@ dev = [
82
83
  "pytest-xdist >= 3.7.0, < 3.8",
83
84
  # CI
84
85
  "win32_setctime >= 1.2.0, < 1.3", # https://github.com/Delgan/loguru/issues/147
86
+ "aiolimiter>=1.2.1",
85
87
  ]
86
88
 
87
89
  # project
@@ -93,7 +95,7 @@ dependencies = [
93
95
  name = "dycw-utilities"
94
96
  readme = "README.md"
95
97
  requires-python = ">= 3.12"
96
- version = "0.129.11"
98
+ version = "0.129.13"
97
99
 
98
100
  [project.optional-dependencies]
99
101
  logging = [
@@ -104,7 +106,7 @@ logging = [
104
106
  ]
105
107
  test = [
106
108
  "dycw-pytest-only >= 2.1.1, < 2.2",
107
- "hypothesis >= 6.135.0, < 6.136",
109
+ "hypothesis >= 6.135.2, < 6.136",
108
110
  "pytest >= 8.3.5, < 8.4",
109
111
  "pytest-asyncio >= 1.0.0, < 1.1",
110
112
  "pytest-cov >= 6.1.1, < 6.2",
@@ -117,6 +119,9 @@ test = [
117
119
  "pytest-timeout >= 2.4.0, < 2.5",
118
120
  "pytest-xdist >= 3.7.0, < 3.8",
119
121
  ]
122
+ zzz-test-aiolimiter = [
123
+ "aiolimiter >= 1.2.1, < 1.3",
124
+ ]
120
125
  zzz-test-altair = [
121
126
  "altair >= 5.5.0, < 5.6",
122
127
  "atomicwrites >= 1.4.1, < 1.5",
@@ -179,9 +184,9 @@ zzz-test-hypothesis = [
179
184
  "aiosqlite >= 0.21.0, < 0.22",
180
185
  "asyncpg >= 0.30.0, < 0.31", # for sqlalchemy async
181
186
  "greenlet >= 3.2.0, < 3.3", # for sqlalchemy async
182
- "hypothesis >= 6.135.0, < 6.136",
187
+ "hypothesis >= 6.135.2, < 6.136",
183
188
  "luigi >= 3.6.0, < 3.7",
184
- "numpy >= 2.2.6, < 2.3",
189
+ "numpy >= 2.3.0, < 2.4",
185
190
  "pathvalidate >= 3.2.3, < 3.3",
186
191
  "redis >= 6.2.0, < 6.3",
187
192
  "sqlalchemy >= 2.0.41, < 2.1",
@@ -212,11 +217,11 @@ zzz-test-luigi = [
212
217
  "luigi >= 3.6.0, < 3.7",
213
218
  "whenever >= 0.8.4, < 0.9",
214
219
  ]
215
- zzz-test-math = ["numpy >= 2.2.6, < 2.3"]
220
+ zzz-test-math = ["numpy >= 2.3.0, < 2.4"]
216
221
  zzz-test-memory-profiler = ["memory-profiler >= 0.61.0, < 0.62"]
217
222
  zzz-test-modules = []
218
223
  zzz-test-more-itertools = ["more-itertools >= 10.7.0, < 10.8"]
219
- zzz-test-numpy = ["numpy >= 2.2.6, < 2.3"]
224
+ zzz-test-numpy = ["numpy >= 2.3.0, < 2.4"]
220
225
  zzz-test-operator = [
221
226
  "polars-lts-cpu >= 1.30.0, < 1.31",
222
227
  "whenever >= 0.8.4, < 0.9",
@@ -274,7 +279,7 @@ zzz-test-scipy = ["scipy >= 1.15.3, < 1.16"]
274
279
  zzz-test-sentinel = []
275
280
  zzz-test-shelve = []
276
281
  zzz-test-slack-sdk = [
277
- "aiohttp >= 3.12.9, < 3.12.10", # for slack
282
+ "aiohttp >= 3.12.11, < 3.13", # for slack
278
283
  "slack-sdk >= 3.35.0, < 3.36",
279
284
  ]
280
285
  zzz-test-socket = []
@@ -338,7 +343,7 @@ zzz-test-zoneinfo = [
338
343
  # bump-my-version
339
344
  [tool.bumpversion]
340
345
  allow_dirty = true
341
- current_version = "0.129.11"
346
+ current_version = "0.129.13"
342
347
 
343
348
  [[tool.bumpversion.files]]
344
349
  filename = "src/utilities/__init__.py"
@@ -449,6 +454,7 @@ filterwarnings = [
449
454
  "ignore:Implicitly cleaning up <TemporaryDirectory '.*'>:ResourceWarning",
450
455
  "ignore:ResourceTracker called reentrantly for resource cleanup, which is unsupported:UserWarning",
451
456
  "ignore:Task .* without outputs has no custom complete.* method:UserWarning", # luigi
457
+ "ignore:The garbage collector is trying to clean up non-checked-in connection <AdaptedConnection <Connection(.*)>>:sqlalchemy.exc.SAWarning", # sqlalchemy
452
458
  "ignore:There is no current event loop:DeprecationWarning", # eventkit
453
459
  "ignore:Using fork.* can cause Polars to deadlock in the child process:RuntimeWarning", # polars/pqdm
454
460
  "ignore:coroutine 'AsyncConnection.close' was never awaited:RuntimeWarning",
@@ -0,0 +1,39 @@
1
+ from __future__ import annotations
2
+
3
+ from asyncio import sleep
4
+ from typing import ClassVar
5
+
6
+ from utilities.aiolimiter import get_async_limiter
7
+ from utilities.text import unique_str
8
+ from utilities.timer import Timer
9
+
10
+
11
+ class TestGetAsyncLimiter:
12
+ async def test_main(self) -> None:
13
+ counter = 0
14
+
15
+ async def increment() -> None:
16
+ nonlocal counter
17
+ counter += 1
18
+ await sleep(0.01)
19
+
20
+ name = unique_str()
21
+ with Timer() as timer:
22
+ for _ in range(2):
23
+ async with get_async_limiter(name, rate=0.5):
24
+ await increment()
25
+ assert timer >= 0.48
26
+
27
+ shared: ClassVar[str] = unique_str()
28
+
29
+ async def test_shared1(self) -> None:
30
+ async with get_async_limiter(self.shared):
31
+ await sleep(0.01)
32
+
33
+ async def test_shared2(self) -> None:
34
+ async with get_async_limiter(self.shared):
35
+ await sleep(0.01)
36
+
37
+ async def test_shared3(self) -> None:
38
+ async with get_async_limiter(self.shared):
39
+ await sleep(0.01)
@@ -8,11 +8,13 @@ from hypothesis import given, settings
8
8
  from hypothesis.strategies import integers, sets
9
9
  from pytest import mark, param, raises
10
10
 
11
+ from tests.conftest import SKIPIF_CI_AND_WINDOWS
11
12
  from utilities.dataclasses import replace_non_sentinel
12
13
  from utilities.hypothesis import git_repos, paths, temp_paths
13
14
  from utilities.pathlib import (
14
15
  GetRootError,
15
16
  ensure_suffix,
17
+ expand_path,
16
18
  get_path,
17
19
  get_root,
18
20
  list_dir,
@@ -40,6 +42,25 @@ class TestEnsureSuffix:
40
42
  assert result == expected
41
43
 
42
44
 
45
+ class TestExpandPath:
46
+ @mark.parametrize(
47
+ ("path", "expected"),
48
+ [
49
+ param("foo", Path("foo")),
50
+ param("~", Path.home()),
51
+ param("~/foo", Path.home().joinpath("foo")),
52
+ param("$HOME", Path.home(), marks=SKIPIF_CI_AND_WINDOWS),
53
+ param(
54
+ "$HOME/foo", Path.home().joinpath("foo"), marks=SKIPIF_CI_AND_WINDOWS
55
+ ),
56
+ ],
57
+ ids=str,
58
+ )
59
+ def test_main(self, *, path: Path, expected: Path) -> None:
60
+ result = expand_path(path)
61
+ assert result == expected
62
+
63
+
43
64
  class TestGetPath:
44
65
  @given(path=paths())
45
66
  def test_path(self, *, path: Path) -> None:
@@ -1,3 +1,3 @@
1
1
  from __future__ import annotations
2
2
 
3
- __version__ = "0.129.11"
3
+ __version__ = "0.129.13"
@@ -0,0 +1,25 @@
1
+ from __future__ import annotations
2
+
3
+ from asyncio import get_running_loop
4
+ from typing import TYPE_CHECKING
5
+
6
+ from aiolimiter import AsyncLimiter
7
+
8
+ if TYPE_CHECKING:
9
+ from collections.abc import Hashable
10
+
11
+ _LIMITERS: dict[tuple[int, Hashable], AsyncLimiter] = {}
12
+
13
+
14
+ def get_async_limiter(key: Hashable, /, *, rate: float = 1.0) -> AsyncLimiter:
15
+ """Get a loop-aware rate limiter."""
16
+ id_ = id(get_running_loop())
17
+ full = (id_, key)
18
+ try:
19
+ return _LIMITERS[full]
20
+ except KeyError:
21
+ limiter = _LIMITERS[full] = AsyncLimiter(1.0, time_period=rate)
22
+ return limiter
23
+
24
+
25
+ __all__ = ["get_async_limiter"]
@@ -5,6 +5,7 @@ from contextlib import contextmanager, suppress
5
5
  from dataclasses import dataclass
6
6
  from itertools import chain
7
7
  from os import chdir
8
+ from os.path import expandvars
8
9
  from pathlib import Path
9
10
  from re import IGNORECASE, search
10
11
  from subprocess import PIPE, CalledProcessError, check_output
@@ -34,6 +35,16 @@ def ensure_suffix(path: PathLike, suffix: str, /) -> Path:
34
35
  ##
35
36
 
36
37
 
38
+ def expand_path(path: PathLike, /) -> Path:
39
+ """Expand a path."""
40
+ path = str(path)
41
+ path = expandvars(path)
42
+ return Path(path).expanduser()
43
+
44
+
45
+ ##
46
+
47
+
37
48
  @overload
38
49
  def get_path(*, path: MaybeCallablePathLike | None) -> Path: ...
39
50
  @overload
@@ -111,4 +122,4 @@ def temp_cwd(path: PathLike, /) -> Iterator[None]:
111
122
  chdir(prev)
112
123
 
113
124
 
114
- __all__ = ["PWD", "ensure_suffix", "get_path", "list_dir", "temp_cwd"]
125
+ __all__ = ["PWD", "ensure_suffix", "expand_path", "get_path", "list_dir", "temp_cwd"]
@@ -19,7 +19,7 @@ def _ppf_1d(array: NDArrayF, cutoff: float, /) -> NDArrayF:
19
19
  out = full_like(array, nan, dtype=float)
20
20
  out[j] = _ppf_1d(array[j], cutoff)
21
21
  return out
22
- low, high = min(array), max(array)
22
+ low, high = array.min(), array.max()
23
23
  if is_zero(span := high - low):
24
24
  return zeros_like(array, dtype=float)
25
25
  centred = (array - low) / span