dycw-utilities 0.166.0__tar.gz → 0.166.2__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 (211) hide show
  1. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/PKG-INFO +1 -1
  2. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/pyproject.toml +2 -2
  3. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_polars.py +12 -13
  4. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_whenever.py +9 -23
  5. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/__init__.py +1 -1
  6. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/polars.py +8 -6
  7. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/whenever.py +17 -15
  8. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/.gitignore +0 -0
  9. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/LICENSE +0 -0
  10. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/README.md +0 -0
  11. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/__init__.py +0 -0
  12. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/conftest.py +0 -0
  13. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/modules/__init__.py +0 -0
  14. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/modules/package_missing/__init__.py +0 -0
  15. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/modules/package_missing/module.py +0 -0
  16. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/modules/package_with/__init__.py +0 -0
  17. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/modules/package_with/outer_1.py +0 -0
  18. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/modules/package_with/outer_2.py +0 -0
  19. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
  20. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
  21. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
  22. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
  23. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/modules/package_without/__init__.py +0 -0
  24. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/modules/package_without/module_1.py +0 -0
  25. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/modules/package_without/module_2.py +0 -0
  26. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/modules/standalone.py +0 -0
  27. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/modules/with_imports.py +0 -0
  28. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
  29. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
  30. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
  31. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
  32. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
  33. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
  34. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
  35. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
  36. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_aeventkit.py +0 -0
  37. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_altair.py +0 -0
  38. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_asyncio.py +0 -0
  39. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_atomicwrites.py +0 -0
  40. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_atools.py +0 -0
  41. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_cachetools.py +0 -0
  42. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_click.py +0 -0
  43. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_concurrent.py +0 -0
  44. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_contextlib.py +0 -0
  45. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_contextvars.py +0 -0
  46. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_cryptography.py +0 -0
  47. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_cvxpy.py +0 -0
  48. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_dataclasses.py +0 -0
  49. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_enum.py +0 -0
  50. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_errors.py +0 -0
  51. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_fastapi.py +0 -0
  52. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_fpdf2.py +0 -0
  53. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_functions.py +0 -0
  54. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_functools.py +0 -0
  55. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_getpass.py +0 -0
  56. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_gzip.py +0 -0
  57. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_hashlib.py +0 -0
  58. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_http.py +0 -0
  59. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_hypothesis.py +0 -0
  60. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_importlib.py +0 -0
  61. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_inflect.py +0 -0
  62. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_ipython.py +0 -0
  63. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_iterables.py +0 -0
  64. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_json.py +0 -0
  65. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_jupyter.py +0 -0
  66. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_libcst.py +0 -0
  67. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_lightweight_charts.py +0 -0
  68. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_logging.py +0 -0
  69. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_math.py +0 -0
  70. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_memory_profiler.py +0 -0
  71. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_modules.py +0 -0
  72. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_more_itertools.py +0 -0
  73. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_numpy.py +0 -0
  74. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_objects/__init__.py +0 -0
  75. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_objects/objects.py +0 -0
  76. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_operator.py +0 -0
  77. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_optuna.py +0 -0
  78. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_orjson.py +0 -0
  79. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_os.py +0 -0
  80. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_parse.py +0 -0
  81. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_pathlib.py +0 -0
  82. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_pickle.py +0 -0
  83. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_platform.py +0 -0
  84. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_polars_ols.py +0 -0
  85. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_postgres.py +0 -0
  86. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_pottery.py +0 -0
  87. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_pqdm.py +0 -0
  88. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_psutil.py +0 -0
  89. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_pyinstrument.py +0 -0
  90. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_pytest.py +0 -0
  91. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_pytest_randomly.py +0 -0
  92. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_pytest_regressions.py +0 -0
  93. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_random.py +0 -0
  94. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_re.py +0 -0
  95. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_redis.py +0 -0
  96. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_reprlib.py +0 -0
  97. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_scipy.py +0 -0
  98. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_sentinel.py +0 -0
  99. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_shelve.py +0 -0
  100. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_slack_sdk.py +0 -0
  101. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_socket.py +0 -0
  102. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_sqlalchemy.py +0 -0
  103. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_sqlalchemy_polars.py +0 -0
  104. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_statsmodels.py +0 -0
  105. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_string.py +0 -0
  106. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_tempfile.py +0 -0
  107. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_testbook.py +0 -0
  108. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_text.py +0 -0
  109. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_threading.py +0 -0
  110. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_timer.py +0 -0
  111. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_traceback.py +0 -0
  112. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_typed_settings.py +0 -0
  113. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_types.py +0 -0
  114. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_typing.py +0 -0
  115. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_typing_funcs/__init__.py +0 -0
  116. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_typing_funcs/no_future.py +0 -0
  117. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_typing_funcs/with_future.py +0 -0
  118. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_tzdata.py +0 -0
  119. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_tzlocal.py +0 -0
  120. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_uuid.py +0 -0
  121. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_version.py +0 -0
  122. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_warnings.py +0 -0
  123. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_zipfile.py +0 -0
  124. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/tests/test_zoneinfo.py +0 -0
  125. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/aeventkit.py +0 -0
  126. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/altair.py +0 -0
  127. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/asyncio.py +0 -0
  128. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/atomicwrites.py +0 -0
  129. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/atools.py +0 -0
  130. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/cachetools.py +0 -0
  131. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/click.py +0 -0
  132. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/concurrent.py +0 -0
  133. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/contextlib.py +0 -0
  134. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/contextvars.py +0 -0
  135. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/cryptography.py +0 -0
  136. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/cvxpy.py +0 -0
  137. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/dataclasses.py +0 -0
  138. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/enum.py +0 -0
  139. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/errors.py +0 -0
  140. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/fastapi.py +0 -0
  141. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/fpdf2.py +0 -0
  142. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/functions.py +0 -0
  143. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/functools.py +0 -0
  144. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/getpass.py +0 -0
  145. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/gzip.py +0 -0
  146. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/hashlib.py +0 -0
  147. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/http.py +0 -0
  148. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/hypothesis.py +0 -0
  149. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/importlib.py +0 -0
  150. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/inflect.py +0 -0
  151. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/ipython.py +0 -0
  152. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/iterables.py +0 -0
  153. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/json.py +0 -0
  154. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/jupyter.py +0 -0
  155. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/libcst.py +0 -0
  156. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/lightweight_charts.py +0 -0
  157. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/logging.py +0 -0
  158. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/math.py +0 -0
  159. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/memory_profiler.py +0 -0
  160. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/modules.py +0 -0
  161. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/more_itertools.py +0 -0
  162. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/numpy.py +0 -0
  163. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/operator.py +0 -0
  164. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/optuna.py +0 -0
  165. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/orjson.py +0 -0
  166. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/os.py +0 -0
  167. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/parse.py +0 -0
  168. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/pathlib.py +0 -0
  169. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/pickle.py +0 -0
  170. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/platform.py +0 -0
  171. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/polars_ols.py +0 -0
  172. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/postgres.py +0 -0
  173. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/pottery.py +0 -0
  174. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/pqdm.py +0 -0
  175. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/psutil.py +0 -0
  176. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/py.typed +0 -0
  177. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/pyinstrument.py +0 -0
  178. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/pytest.py +0 -0
  179. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/pytest_plugins/__init__.py +0 -0
  180. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/pytest_plugins/pytest_randomly.py +0 -0
  181. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/pytest_plugins/pytest_regressions.py +0 -0
  182. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/pytest_regressions.py +0 -0
  183. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/random.py +0 -0
  184. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/re.py +0 -0
  185. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/redis.py +0 -0
  186. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/reprlib.py +0 -0
  187. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/scipy.py +0 -0
  188. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/sentinel.py +0 -0
  189. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/shelve.py +0 -0
  190. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/slack_sdk.py +0 -0
  191. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/socket.py +0 -0
  192. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/sqlalchemy.py +0 -0
  193. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/sqlalchemy_polars.py +0 -0
  194. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/statsmodels.py +0 -0
  195. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/string.py +0 -0
  196. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/tempfile.py +0 -0
  197. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/testbook.py +0 -0
  198. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/text.py +0 -0
  199. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/threading.py +0 -0
  200. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/timer.py +0 -0
  201. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/traceback.py +0 -0
  202. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/typed_settings.py +0 -0
  203. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/types.py +0 -0
  204. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/typing.py +0 -0
  205. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/tzdata.py +0 -0
  206. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/tzlocal.py +0 -0
  207. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/uuid.py +0 -0
  208. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/version.py +0 -0
  209. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/warnings.py +0 -0
  210. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/zipfile.py +0 -0
  211. {dycw_utilities-0.166.0 → dycw_utilities-0.166.2}/src/utilities/zoneinfo.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dycw-utilities
3
- Version: 0.166.0
3
+ Version: 0.166.2
4
4
  Author-email: Derek Wan <d.wan@icloud.com>
5
5
  License-File: LICENSE
6
6
  Requires-Python: >=3.12
@@ -233,7 +233,7 @@ dependencies = [
233
233
  name = "dycw-utilities"
234
234
  readme = "README.md"
235
235
  requires-python = ">= 3.12"
236
- version = "0.166.0"
236
+ version = "0.166.2"
237
237
 
238
238
  [project.entry-points.pytest11]
239
239
  pytest-randomly = "utilities.pytest_plugins.pytest_randomly"
@@ -266,7 +266,7 @@ test = [
266
266
  # bump-my-version
267
267
  [tool.bumpversion]
268
268
  allow_dirty = true
269
- current_version = "0.166.0"
269
+ current_version = "0.166.2"
270
270
 
271
271
  [[tool.bumpversion.files]]
272
272
  filename = "src/utilities/__init__.py"
@@ -838,21 +838,20 @@ class TestChoice:
838
838
 
839
839
 
840
840
  class TestColumnsToDict:
841
- def test_main(self) -> None:
842
- df = DataFrame(
843
- data=[{"a": 1, "b": 11}, {"a": 2, "b": 12}, {"a": 3, "b": 13}],
844
- schema={"a": Int64, "b": Int64},
845
- )
846
- mapping = columns_to_dict(df, "a", "b")
847
- assert mapping == {1: 11, 2: 12, 3: 13}
841
+ schema: ClassVar[SchemaDict] = {"x": Int64, "y": Int64}
842
+
843
+ @mark.parametrize("x", [param("x"), param(col.x)])
844
+ @mark.parametrize("y", [param("y"), param(col.y)])
845
+ def test_main(self, *, x: IntoExprColumn, y: IntoExprColumn) -> None:
846
+ df = DataFrame(data=[(1, 2), (3, 4), (5, 6)], schema=self.schema, orient="row")
847
+ mapping = columns_to_dict(df, x, y)
848
+ expected = {1: 2, 3: 4, 5: 6}
849
+ assert mapping == expected
848
850
 
849
851
  def test_error(self) -> None:
850
- df = DataFrame(
851
- data=[{"a": 1, "b": 11}, {"a": 2, "b": 12}, {"a": 1, "b": 13}],
852
- schema={"a": Int64, "b": Int64},
853
- )
854
- with raises(ColumnsToDictError, match="DataFrame must be unique on 'a':\n\n.*"):
855
- _ = columns_to_dict(df, "a", "b")
852
+ df = DataFrame(data=[(1, 1), (1, 2), (1, 3)], schema=self.schema, orient="row")
853
+ with raises(ColumnsToDictError, match="DataFrame must be unique on 'x':\n\n.*"):
854
+ _ = columns_to_dict(df, "x", "y")
856
855
 
857
856
 
858
857
  class TestConcatSeries:
@@ -72,7 +72,6 @@ from utilities.whenever import (
72
72
  DatePeriodError,
73
73
  MeanDateTimeError,
74
74
  MinMaxDateError,
75
- PeriodDict,
76
75
  TimePeriod,
77
76
  ToMonthsAndDaysError,
78
77
  ToNanosecondsError,
@@ -280,13 +279,8 @@ class TestDatePeriod:
280
279
 
281
280
  @given(data=data(), period=date_periods())
282
281
  def test_to_and_from_dict(self, *, data: DataObject, period: DatePeriod) -> None:
283
- dict1 = period.to_dict()
284
- dstart, dend = dict1["start"], dict1["end"]
285
- dict2 = PeriodDict(
286
- start=data.draw(sampled_from([dstart, dstart.py_date()])),
287
- end=data.draw(sampled_from([dend, dend.py_date()])),
288
- )
289
- result = DatePeriod.from_dict(dict2)
282
+ dict_ = data.draw(sampled_from([period.to_dict(), period.to_py_dict()]))
283
+ result = DatePeriod.from_dict(dict_)
290
284
  assert result == period
291
285
 
292
286
  @given(dates=pairs(dates(), unique=True, sorted=True))
@@ -853,14 +847,11 @@ class TestTimePeriod:
853
847
  )
854
848
 
855
849
  @given(data=data(), period=time_periods())
856
- def test_to_and_from_dict(self, *, data: DataObject, period: TimePeriod) -> None:
857
- dict1 = period.to_dict()
858
- dstart, dend = dict1["start"], dict1["end"]
859
- dict2 = PeriodDict(
860
- start=data.draw(sampled_from([dstart, dstart.py_time()])),
861
- end=data.draw(sampled_from([dend, dend.py_time()])),
862
- )
863
- result = TimePeriod.from_dict(dict2)
850
+ def test_to_dict_and_from_dict(
851
+ self, *, data: DataObject, period: TimePeriod
852
+ ) -> None:
853
+ dict_ = data.draw(sampled_from([period.to_dict(), period.to_py_dict()]))
854
+ result = TimePeriod.from_dict(dict_)
864
855
  assert result == period
865
856
 
866
857
 
@@ -1695,13 +1686,8 @@ class TestZonedDateTimePeriod:
1695
1686
  ) -> None:
1696
1687
  start, end = datetimes
1697
1688
  period = ZonedDateTimePeriod(start, end)
1698
- dict1 = period.to_dict()
1699
- dstart, dend = dict1["start"], dict1["end"]
1700
- dict2 = PeriodDict(
1701
- start=data.draw(sampled_from([dstart, dstart.py_datetime()])),
1702
- end=data.draw(sampled_from([dend, dend.py_datetime()])),
1703
- )
1704
- result = ZonedDateTimePeriod.from_dict(dict2)
1689
+ dict_ = data.draw(sampled_from([period.to_dict(), period.to_py_dict()]))
1690
+ result = ZonedDateTimePeriod.from_dict(dict_)
1705
1691
  assert result == period
1706
1692
 
1707
1693
  @given(period=zoned_date_time_periods())
@@ -1,3 +1,3 @@
1
1
  from __future__ import annotations
2
2
 
3
- __version__ = "0.166.0"
3
+ __version__ = "0.166.2"
@@ -830,13 +830,15 @@ def choice(
830
830
  ##
831
831
 
832
832
 
833
- def columns_to_dict(df: DataFrame, key: str, value: str, /) -> dict[Any, Any]:
833
+ def columns_to_dict(
834
+ df: DataFrame, key: IntoExprColumn, value: IntoExprColumn, /
835
+ ) -> dict[Any, Any]:
834
836
  """Map a pair of columns into a dictionary. Must be unique on `key`."""
835
- col_key = df[key]
836
- if col_key.is_duplicated().any():
837
- raise ColumnsToDictError(df=df, key=key)
838
- col_value = df[value]
839
- return dict(zip(col_key, col_value, strict=True))
837
+ df = df.select(key, value)
838
+ key_col, value_col = [df[get_expr_name(df, expr)] for expr in [key, value]]
839
+ if key_col.is_duplicated().any():
840
+ raise ColumnsToDictError(df=df, key=key_col.name)
841
+ return dict(zip(key_col, value_col, strict=True))
840
842
 
841
843
 
842
844
  @dataclass(kw_only=True, slots=True)
@@ -13,7 +13,6 @@ from typing import (
13
13
  Self,
14
14
  SupportsFloat,
15
15
  TypedDict,
16
- TypeVar,
17
16
  assert_never,
18
17
  cast,
19
18
  overload,
@@ -146,9 +145,6 @@ def sub_year_month(x: YearMonth, /, *, years: int = 0, months: int = 0) -> YearM
146
145
  ##
147
146
 
148
147
 
149
- _TDate_co = TypeVar("_TDate_co", bound=Date | dt.date, covariant=True)
150
-
151
-
152
148
  @dataclass(repr=False, order=True, unsafe_hash=True, kw_only=False)
153
149
  class DatePeriod:
154
150
  """A period of dates."""
@@ -210,7 +206,7 @@ class DatePeriod:
210
206
  return f"{fc(start)}-{fc(end)}"
211
207
 
212
208
  @classmethod
213
- def from_dict(cls, mapping: PeriodDict[_TDate_co], /) -> Self:
209
+ def from_dict(cls, mapping: PeriodDict[Date] | PeriodDict[dt.date], /) -> Self:
214
210
  """Convert the dictionary to a period."""
215
211
  match mapping["start"]:
216
212
  case Date() as start:
@@ -238,6 +234,10 @@ class DatePeriod:
238
234
  """Convert the period to a dictionary."""
239
235
  return PeriodDict(start=self.start, end=self.end)
240
236
 
237
+ def to_py_dict(self) -> PeriodDict[dt.date]:
238
+ """Convert the period to a dictionary."""
239
+ return PeriodDict(start=self.start.py_date(), end=self.end.py_date())
240
+
241
241
 
242
242
  @dataclass(kw_only=True, slots=True)
243
243
  class DatePeriodError(Exception):
@@ -788,9 +788,6 @@ class _RoundDateOrDateTimeDateTimeIntraDayWithWeekdayError(RoundDateOrDateTimeEr
788
788
  ##
789
789
 
790
790
 
791
- _TTime_co = TypeVar("_TTime_co", bound=Time | dt.time, covariant=True)
792
-
793
-
794
791
  @dataclass(repr=False, order=True, unsafe_hash=True, kw_only=False)
795
792
  class TimePeriod:
796
793
  """A period of times."""
@@ -817,7 +814,7 @@ class TimePeriod:
817
814
  return DatePeriod(start, end).at((self.start, self.end), time_zone=time_zone)
818
815
 
819
816
  @classmethod
820
- def from_dict(cls, mapping: PeriodDict[_TTime_co], /) -> Self:
817
+ def from_dict(cls, mapping: PeriodDict[Time] | PeriodDict[dt.time], /) -> Self:
821
818
  """Convert the dictionary to a period."""
822
819
  match mapping["start"]:
823
820
  case Time() as start:
@@ -845,6 +842,10 @@ class TimePeriod:
845
842
  """Convert the period to a dictionary."""
846
843
  return PeriodDict(start=self.start, end=self.end)
847
844
 
845
+ def to_py_dict(self) -> PeriodDict[dt.time]:
846
+ """Convert the period to a dictionary."""
847
+ return PeriodDict(start=self.start.py_time(), end=self.end.py_time())
848
+
848
849
 
849
850
  ##
850
851
 
@@ -1726,11 +1727,6 @@ class WheneverLogRecord(LogRecord):
1726
1727
  ##
1727
1728
 
1728
1729
 
1729
- _TDateTime_co = TypeVar(
1730
- "_TDateTime_co", bound=ZonedDateTime | dt.datetime, covariant=True
1731
- )
1732
-
1733
-
1734
1730
  @dataclass(repr=False, order=True, unsafe_hash=True, kw_only=False)
1735
1731
  class ZonedDateTimePeriod:
1736
1732
  """A period of time."""
@@ -1833,7 +1829,9 @@ class ZonedDateTimePeriod:
1833
1829
  return f"{fc(start.to_plain())}-{fc(end, fmt='%Y%m%dT%H')}"
1834
1830
 
1835
1831
  @classmethod
1836
- def from_dict(cls, mapping: PeriodDict[_TDateTime_co], /) -> Self:
1832
+ def from_dict(
1833
+ cls, mapping: PeriodDict[ZonedDateTime] | PeriodDict[dt.datetime], /
1834
+ ) -> Self:
1837
1835
  """Convert the dictionary to a period."""
1838
1836
  match mapping["start"]:
1839
1837
  case ZonedDateTime() as start:
@@ -1869,6 +1867,10 @@ class ZonedDateTimePeriod:
1869
1867
  """Convert the period to a dictionary."""
1870
1868
  return PeriodDict(start=self.start, end=self.end)
1871
1869
 
1870
+ def to_py_dict(self) -> PeriodDict[dt.datetime]:
1871
+ """Convert the period to a dictionary."""
1872
+ return PeriodDict(start=self.start.py_datetime(), end=self.end.py_datetime())
1873
+
1872
1874
  def to_tz(self, time_zone: TimeZoneLike, /) -> Self:
1873
1875
  """Convert the time zone."""
1874
1876
  tz = to_time_zone_name(time_zone)