dycw-utilities 0.153.12__tar.gz → 0.153.15__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 (212) hide show
  1. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/PKG-INFO +1 -1
  2. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/pyproject.toml +2 -2
  3. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_math.py +3 -0
  4. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_polars.py +26 -19
  5. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_random.py +32 -2
  6. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_uuid.py +12 -5
  7. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/__init__.py +1 -1
  8. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/polars.py +2 -1
  9. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/random.py +3 -0
  10. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/sqlalchemy.py +8 -2
  11. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/.gitignore +0 -0
  12. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/LICENSE +0 -0
  13. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/README.md +0 -0
  14. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/__init__.py +0 -0
  15. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/conftest.py +0 -0
  16. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/modules/__init__.py +0 -0
  17. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/modules/package_missing/__init__.py +0 -0
  18. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/modules/package_missing/module.py +0 -0
  19. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/modules/package_with/__init__.py +0 -0
  20. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/modules/package_with/outer_1.py +0 -0
  21. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/modules/package_with/outer_2.py +0 -0
  22. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
  23. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
  24. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
  25. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
  26. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/modules/package_without/__init__.py +0 -0
  27. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/modules/package_without/module_1.py +0 -0
  28. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/modules/package_without/module_2.py +0 -0
  29. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/modules/standalone.py +0 -0
  30. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/modules/with_imports.py +0 -0
  31. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
  32. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
  33. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
  34. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
  35. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
  36. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
  37. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
  38. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
  39. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_altair.py +0 -0
  40. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_asyncio.py +0 -0
  41. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_atomicwrites.py +0 -0
  42. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_atools.py +0 -0
  43. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_cachetools.py +0 -0
  44. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_click.py +0 -0
  45. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_concurrent.py +0 -0
  46. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_contextlib.py +0 -0
  47. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_contextvars.py +0 -0
  48. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_cryptography.py +0 -0
  49. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_cvxpy.py +0 -0
  50. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_dataclasses.py +0 -0
  51. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_enum.py +0 -0
  52. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_errors.py +0 -0
  53. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_eventkit.py +0 -0
  54. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_fastapi.py +0 -0
  55. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_fpdf2.py +0 -0
  56. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_functions.py +0 -0
  57. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_functools.py +0 -0
  58. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_getpass.py +0 -0
  59. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_gzip.py +0 -0
  60. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_hashlib.py +0 -0
  61. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_http.py +0 -0
  62. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_hypothesis.py +0 -0
  63. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_importlib.py +0 -0
  64. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_inflect.py +0 -0
  65. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_ipython.py +0 -0
  66. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_iterables.py +0 -0
  67. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_json.py +0 -0
  68. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_jupyter.py +0 -0
  69. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_libcst.py +0 -0
  70. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_lightweight_charts.py +0 -0
  71. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_logging.py +0 -0
  72. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_memory_profiler.py +0 -0
  73. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_modules.py +0 -0
  74. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_more_itertools.py +0 -0
  75. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_numpy.py +0 -0
  76. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_objects/__init__.py +0 -0
  77. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_objects/objects.py +0 -0
  78. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_operator.py +0 -0
  79. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_optuna.py +0 -0
  80. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_orjson.py +0 -0
  81. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_os.py +0 -0
  82. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_parse.py +0 -0
  83. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_pathlib.py +0 -0
  84. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_pickle.py +0 -0
  85. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_platform.py +0 -0
  86. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_polars_ols.py +0 -0
  87. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_postgres.py +0 -0
  88. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_pottery.py +0 -0
  89. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_pqdm.py +0 -0
  90. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_psutil.py +0 -0
  91. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_pyinstrument.py +0 -0
  92. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_pytest.py +0 -0
  93. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_pytest_randomly.py +0 -0
  94. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_pytest_regressions.py +0 -0
  95. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_re.py +0 -0
  96. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_redis.py +0 -0
  97. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_reprlib.py +0 -0
  98. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_scipy.py +0 -0
  99. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_sentinel.py +0 -0
  100. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_shelve.py +0 -0
  101. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_slack_sdk.py +0 -0
  102. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_socket.py +0 -0
  103. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_sqlalchemy.py +0 -0
  104. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_sqlalchemy_polars.py +0 -0
  105. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_statsmodels.py +0 -0
  106. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_string.py +0 -0
  107. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_tempfile.py +0 -0
  108. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_text.py +0 -0
  109. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_threading.py +0 -0
  110. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_timer.py +0 -0
  111. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_traceback.py +0 -0
  112. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_typed_settings.py +0 -0
  113. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_types.py +0 -0
  114. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_typing.py +0 -0
  115. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_typing_funcs/__init__.py +0 -0
  116. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_typing_funcs/no_future.py +0 -0
  117. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_typing_funcs/with_future.py +0 -0
  118. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_tzdata.py +0 -0
  119. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_tzlocal.py +0 -0
  120. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_version.py +0 -0
  121. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_warnings.py +0 -0
  122. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_whenever.py +0 -0
  123. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_yield_access/__init__.py +0 -0
  124. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_yield_access/script.py +0 -0
  125. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_yield_access/script.sh +0 -0
  126. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_zipfile.py +0 -0
  127. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/tests/test_zoneinfo.py +0 -0
  128. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/altair.py +0 -0
  129. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/asyncio.py +0 -0
  130. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/atomicwrites.py +0 -0
  131. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/atools.py +0 -0
  132. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/cachetools.py +0 -0
  133. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/click.py +0 -0
  134. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/concurrent.py +0 -0
  135. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/contextlib.py +0 -0
  136. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/contextvars.py +0 -0
  137. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/cryptography.py +0 -0
  138. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/cvxpy.py +0 -0
  139. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/dataclasses.py +0 -0
  140. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/enum.py +0 -0
  141. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/errors.py +0 -0
  142. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/eventkit.py +0 -0
  143. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/fastapi.py +0 -0
  144. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/fpdf2.py +0 -0
  145. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/functions.py +0 -0
  146. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/functools.py +0 -0
  147. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/getpass.py +0 -0
  148. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/gzip.py +0 -0
  149. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/hashlib.py +0 -0
  150. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/http.py +0 -0
  151. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/hypothesis.py +0 -0
  152. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/importlib.py +0 -0
  153. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/inflect.py +0 -0
  154. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/ipython.py +0 -0
  155. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/iterables.py +0 -0
  156. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/json.py +0 -0
  157. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/jupyter.py +0 -0
  158. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/libcst.py +0 -0
  159. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/lightweight_charts.py +0 -0
  160. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/logging.py +0 -0
  161. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/math.py +0 -0
  162. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/memory_profiler.py +0 -0
  163. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/modules.py +0 -0
  164. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/more_itertools.py +0 -0
  165. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/numpy.py +0 -0
  166. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/operator.py +0 -0
  167. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/optuna.py +0 -0
  168. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/orjson.py +0 -0
  169. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/os.py +0 -0
  170. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/parse.py +0 -0
  171. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/pathlib.py +0 -0
  172. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/pickle.py +0 -0
  173. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/platform.py +0 -0
  174. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/polars_ols.py +0 -0
  175. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/postgres.py +0 -0
  176. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/pottery.py +0 -0
  177. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/pqdm.py +0 -0
  178. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/psutil.py +0 -0
  179. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/py.typed +0 -0
  180. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/pyinstrument.py +0 -0
  181. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/pytest.py +0 -0
  182. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/pytest_plugins/__init__.py +0 -0
  183. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/pytest_plugins/pytest_randomly.py +0 -0
  184. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/pytest_plugins/pytest_regressions.py +0 -0
  185. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/pytest_regressions.py +0 -0
  186. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/re.py +0 -0
  187. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/redis.py +0 -0
  188. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/reprlib.py +0 -0
  189. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/scipy.py +0 -0
  190. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/sentinel.py +0 -0
  191. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/shelve.py +0 -0
  192. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/slack_sdk.py +0 -0
  193. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/socket.py +0 -0
  194. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/sqlalchemy_polars.py +0 -0
  195. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/statsmodels.py +0 -0
  196. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/string.py +0 -0
  197. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/tempfile.py +0 -0
  198. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/text.py +0 -0
  199. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/threading.py +0 -0
  200. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/timer.py +0 -0
  201. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/traceback.py +0 -0
  202. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/typed_settings.py +0 -0
  203. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/types.py +0 -0
  204. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/typing.py +0 -0
  205. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/tzdata.py +0 -0
  206. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/tzlocal.py +0 -0
  207. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/uuid.py +0 -0
  208. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/version.py +0 -0
  209. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/warnings.py +0 -0
  210. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/whenever.py +0 -0
  211. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/zipfile.py +0 -0
  212. {dycw_utilities-0.153.12 → dycw_utilities-0.153.15}/src/utilities/zoneinfo.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dycw-utilities
3
- Version: 0.153.12
3
+ Version: 0.153.15
4
4
  Author-email: Derek Wan <d.wan@icloud.com>
5
5
  License-File: LICENSE
6
6
  Requires-Python: >=3.12
@@ -229,7 +229,7 @@ dependencies = [
229
229
  name = "dycw-utilities"
230
230
  readme = "README.md"
231
231
  requires-python = ">= 3.12"
232
- version = "0.153.12"
232
+ version = "0.153.15"
233
233
 
234
234
  [project.entry-points.pytest11]
235
235
  pytest-randomly = "utilities.pytest_plugins.pytest_randomly"
@@ -262,7 +262,7 @@ test = [
262
262
  # bump-my-version
263
263
  [tool.bumpversion]
264
264
  allow_dirty = true
265
- current_version = "0.153.12"
265
+ current_version = "0.153.15"
266
266
 
267
267
  [[tool.bumpversion.files]]
268
268
  filename = "src/utilities/__init__.py"
@@ -1175,6 +1175,9 @@ class TestRoundToFloat:
1175
1175
  param(1.8, 0.5, 2.0),
1176
1176
  param(1.9, 0.5, 2.0),
1177
1177
  param(2.0, 0.5, 2.0),
1178
+ param(1.0745999813079834, 5e-5, 1.0746),
1179
+ param(1.0745500326156616, 5e-5, 1.07455),
1180
+ param(1.0745999813079834, 5e-5, 1.0746),
1178
1181
  ]
1179
1182
 
1180
1183
  @mark.parametrize(("x", "y", "expected"), cases)
@@ -8,6 +8,7 @@ from enum import auto
8
8
  from itertools import chain, repeat
9
9
  from math import isfinite, nan
10
10
  from pathlib import Path
11
+ from random import Random
11
12
  from typing import TYPE_CHECKING, Any, ClassVar, Literal, assert_never, cast
12
13
  from uuid import UUID, uuid4
13
14
 
@@ -202,7 +203,6 @@ from utilities.polars import (
202
203
  zoned_datetime_dtype,
203
204
  zoned_datetime_period_dtype,
204
205
  )
205
- from utilities.random import get_state
206
206
  from utilities.sentinel import Sentinel, sentinel
207
207
  from utilities.tzdata import HongKong, Tokyo, USCentral, USEastern
208
208
  from utilities.whenever import get_now, get_today
@@ -1440,37 +1440,44 @@ class TestFiniteEWMMean:
1440
1440
  6.849902999800129,
1441
1441
  ]
1442
1442
 
1443
- @given(
1444
- case=sampled_from([
1445
- [
1443
+ @mark.parametrize(
1444
+ ("alpha", "exp_base", "min_weight", "exp_result"),
1445
+ [
1446
+ param(
1446
1447
  0.75,
1447
- 0.9,
1448
1448
  alpha_0_75_values,
1449
+ 0.9,
1449
1450
  [-8.28235294117647, -8.070588235294117, 3.2705882352941176],
1450
- ],
1451
- [
1451
+ ),
1452
+ param(
1452
1453
  0.75,
1453
- 0.9999,
1454
1454
  alpha_0_75_values,
1455
+ 0.9999,
1455
1456
  [-8.269864158112174, -8.06746317849418, 3.2331284833087284],
1456
- ],
1457
- [
1457
+ ),
1458
+ param(
1458
1459
  0.99,
1459
- 0.9,
1460
1460
  alpha_0_99_values,
1461
+ 0.9,
1461
1462
  [-8.970002970002971, -8.00970200970201, 6.849915849915851],
1462
- ],
1463
- [
1463
+ ),
1464
+ param(
1464
1465
  0.99,
1465
- 0.9999,
1466
1466
  alpha_0_99_values,
1467
+ 0.9999,
1467
1468
  [-8.970002000096999, -8.00970002000097, 6.84990300128499],
1468
- ],
1469
- ])
1469
+ ),
1470
+ ],
1470
1471
  )
1471
- def test_main(self, *, case: tuple[float, float, list[float], list[float]]) -> None:
1472
- alpha, min_weight, exp_base, exp_result = case
1473
- state = get_state(0)
1472
+ def test_main(
1473
+ self,
1474
+ *,
1475
+ alpha: float,
1476
+ exp_base: list[float],
1477
+ min_weight: float,
1478
+ exp_result: list[float],
1479
+ ) -> None:
1480
+ state = Random(0)
1474
1481
  series = Series(values=[state.randint(-10, 10) for _ in range(100)])
1475
1482
  base = series.ewm_mean(alpha=alpha)
1476
1483
  exp_base_sr = Series(values=exp_base, dtype=Float64)
@@ -32,6 +32,18 @@ class TestGetDockerName:
32
32
  name = get_docker_name()
33
33
  assert search(r"^[a-z]+_[a-z]+\d$", name)
34
34
 
35
+ def test_deterministic(self) -> None:
36
+ expected = [
37
+ "priceless_hypatia8",
38
+ "quizzical_aryabhata6",
39
+ "priceless_wing2",
40
+ "dazzling_mclean2",
41
+ "epic_montalcini8",
42
+ ]
43
+ for exp in expected:
44
+ result = get_docker_name(TestGetDockerName.test_deterministic.__qualname__)
45
+ assert result == exp
46
+
35
47
 
36
48
  class TestGetState:
37
49
  @given(seed=integers() | just(SYSTEM_RANDOM))
@@ -39,6 +51,14 @@ class TestGetState:
39
51
  state = get_state(seed)
40
52
  assert isinstance(state, Random)
41
53
 
54
+ def test_deterministic(self) -> None:
55
+ expected = [6, 4, 8, 10, 6]
56
+ for exp in expected:
57
+ result = get_state(TestGetState.test_deterministic.__qualname__).randint(
58
+ 0, 10
59
+ )
60
+ assert result == exp
61
+
42
62
 
43
63
  class TestShuffle:
44
64
  @given(iterable=iterables(integers()), seed=integers())
@@ -46,8 +66,18 @@ class TestShuffle:
46
66
  as_set = set(iterable)
47
67
  result = shuffle(as_set, seed=seed)
48
68
  assert set(result) == as_set
49
- result2 = shuffle(as_set, seed=seed)
50
- assert result == result2
69
+
70
+ def test_deterministic(self) -> None:
71
+ expected = [
72
+ [2, 3, 0, 4, 1],
73
+ [3, 1, 2, 0, 4],
74
+ [1, 0, 4, 3, 2],
75
+ [1, 0, 2, 3, 4],
76
+ [4, 0, 3, 1, 2],
77
+ ]
78
+ for exp in expected:
79
+ result = shuffle(range(5), seed=TestShuffle.test_deterministic.__qualname__)
80
+ assert result == exp
51
81
 
52
82
 
53
83
  class TestSystemRandom:
@@ -6,7 +6,7 @@ from typing import TYPE_CHECKING, Self
6
6
  from uuid import UUID
7
7
 
8
8
  from hypothesis import given
9
- from hypothesis.strategies import integers, none, randoms, uuids
9
+ from hypothesis.strategies import none, randoms, uuids
10
10
 
11
11
  from utilities.dataclasses import replace_non_sentinel
12
12
  from utilities.hypothesis import pairs
@@ -25,10 +25,17 @@ class TestGetUUID:
25
25
  def test_main(self, *, seed: Random | None) -> None:
26
26
  assert isinstance(get_uuid(seed), UUID)
27
27
 
28
- @given(seed=integers())
29
- def test_deterministic(self, *, seed: int) -> None:
30
- uuid1, uuid2 = [get_uuid(seed) for _ in range(2)]
31
- assert uuid1 == uuid2
28
+ def test_deterministic(self) -> None:
29
+ expected = [
30
+ UUID("c1887c3c-6d8b-47e3-a6e9-e8b1e502cf8f"),
31
+ UUID("62333b56-33ff-4020-9126-b19ff1e86e12"),
32
+ UUID("db8ecae8-5dab-404b-88b0-8ed406820197"),
33
+ UUID("95977936-0733-413b-96db-a241c3cc55d8"),
34
+ UUID("24e9640f-8258-495d-899e-9139cf51a545"),
35
+ ]
36
+ for exp in expected:
37
+ result = get_uuid(TestGetUUID.test_deterministic.__qualname__)
38
+ assert result == exp
32
39
 
33
40
 
34
41
  class TestToUUID:
@@ -1,3 +1,3 @@
1
1
  from __future__ import annotations
2
2
 
3
- __version__ = "0.153.12"
3
+ __version__ = "0.153.15"
@@ -2383,7 +2383,8 @@ def round_to_float(
2383
2383
  ) -> ExprOrSeries:
2384
2384
  """Round a column to the nearest multiple of another float."""
2385
2385
  x = ensure_expr_or_series(x)
2386
- return (x / y).round(mode=mode) * y
2386
+ z = (x / y).round(mode=mode) * y
2387
+ return z.round(decimals=number_of_decimals(y) + 1)
2387
2388
 
2388
2389
 
2389
2390
  ##
@@ -3,6 +3,8 @@ from __future__ import annotations
3
3
  from random import Random, SystemRandom
4
4
  from typing import TYPE_CHECKING
5
5
 
6
+ from utilities.functools import cache
7
+
6
8
  if TYPE_CHECKING:
7
9
  from collections.abc import Iterable
8
10
 
@@ -47,6 +49,7 @@ _DOCKER_SUFFIXES = [
47
49
  ##
48
50
 
49
51
 
52
+ @cache
50
53
  def get_state(seed: Seed | None = None, /) -> Random:
51
54
  """Get a random state."""
52
55
  return seed if isinstance(seed, Random) else Random(x=seed)
@@ -128,7 +128,7 @@ def check_connect(engine: Engine, /) -> bool:
128
128
  try:
129
129
  with engine.connect() as conn:
130
130
  return bool(conn.execute(_SELECT).scalar_one())
131
- except (gaierror, OperationalError, ProgrammingError):
131
+ except (gaierror, ConnectionRefusedError, OperationalError, ProgrammingError):
132
132
  return False
133
133
 
134
134
 
@@ -139,7 +139,13 @@ async def check_connect_async(
139
139
  try:
140
140
  async with timeout_td(timeout), engine.connect() as conn:
141
141
  return bool((await conn.execute(_SELECT)).scalar_one())
142
- except (gaierror, OperationalError, ProgrammingError, TimeoutError):
142
+ except (
143
+ gaierror,
144
+ ConnectionRefusedError,
145
+ OperationalError,
146
+ ProgrammingError,
147
+ TimeoutError,
148
+ ):
143
149
  return False
144
150
 
145
151