dycw-utilities 0.153.2__tar.gz → 0.153.3__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.2 → dycw_utilities-0.153.3}/PKG-INFO +1 -1
  2. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/pyproject.toml +3 -3
  3. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_polars.py +25 -1
  4. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/__init__.py +1 -1
  5. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/polars.py +87 -0
  6. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/.gitignore +0 -0
  7. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/LICENSE +0 -0
  8. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/README.md +0 -0
  9. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/__init__.py +0 -0
  10. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/conftest.py +0 -0
  11. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/modules/__init__.py +0 -0
  12. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/modules/package_missing/__init__.py +0 -0
  13. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/modules/package_missing/module.py +0 -0
  14. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/modules/package_with/__init__.py +0 -0
  15. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/modules/package_with/outer_1.py +0 -0
  16. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/modules/package_with/outer_2.py +0 -0
  17. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
  18. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
  19. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
  20. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
  21. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/modules/package_without/__init__.py +0 -0
  22. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/modules/package_without/module_1.py +0 -0
  23. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/modules/package_without/module_2.py +0 -0
  24. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/modules/standalone.py +0 -0
  25. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/modules/with_imports.py +0 -0
  26. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
  27. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
  28. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
  29. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
  30. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
  31. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
  32. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
  33. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
  34. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_altair.py +0 -0
  35. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_asyncio.py +0 -0
  36. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_atomicwrites.py +0 -0
  37. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_atools.py +0 -0
  38. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_cachetools.py +0 -0
  39. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_click.py +0 -0
  40. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_concurrent.py +0 -0
  41. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_contextlib.py +0 -0
  42. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_contextvars.py +0 -0
  43. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_cryptography.py +0 -0
  44. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_cvxpy.py +0 -0
  45. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_dataclasses.py +0 -0
  46. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_enum.py +0 -0
  47. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_errors.py +0 -0
  48. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_eventkit.py +0 -0
  49. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_fastapi.py +0 -0
  50. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_fpdf2.py +0 -0
  51. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_functions.py +0 -0
  52. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_functools.py +0 -0
  53. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_getpass.py +0 -0
  54. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_gzip.py +0 -0
  55. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_hashlib.py +0 -0
  56. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_http.py +0 -0
  57. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_hypothesis.py +0 -0
  58. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_importlib.py +0 -0
  59. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_inflect.py +0 -0
  60. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_ipython.py +0 -0
  61. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_iterables.py +0 -0
  62. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_json.py +0 -0
  63. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_jupyter.py +0 -0
  64. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_libcst.py +0 -0
  65. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_lightweight_charts.py +0 -0
  66. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_logging.py +0 -0
  67. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_math.py +0 -0
  68. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_memory_profiler.py +0 -0
  69. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_modules.py +0 -0
  70. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_more_itertools.py +0 -0
  71. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_numpy.py +0 -0
  72. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_objects/__init__.py +0 -0
  73. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_objects/objects.py +0 -0
  74. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_operator.py +0 -0
  75. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_optuna.py +0 -0
  76. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_orjson.py +0 -0
  77. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_os.py +0 -0
  78. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_parse.py +0 -0
  79. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_pathlib.py +0 -0
  80. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_pickle.py +0 -0
  81. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_platform.py +0 -0
  82. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_polars_ols.py +0 -0
  83. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_postgres.py +0 -0
  84. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_pottery.py +0 -0
  85. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_pqdm.py +0 -0
  86. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_psutil.py +0 -0
  87. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_pyinstrument.py +0 -0
  88. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_pytest.py +0 -0
  89. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_pytest_randomly.py +0 -0
  90. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_pytest_regressions.py +0 -0
  91. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_random.py +0 -0
  92. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_re.py +0 -0
  93. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_redis.py +0 -0
  94. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_reprlib.py +0 -0
  95. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_scipy.py +0 -0
  96. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_sentinel.py +0 -0
  97. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_shelve.py +0 -0
  98. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_slack_sdk.py +0 -0
  99. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_socket.py +0 -0
  100. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_sqlalchemy.py +0 -0
  101. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_sqlalchemy_polars.py +0 -0
  102. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_statsmodels.py +0 -0
  103. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_string.py +0 -0
  104. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_tempfile.py +0 -0
  105. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_text.py +0 -0
  106. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_threading.py +0 -0
  107. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_timer.py +0 -0
  108. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_traceback.py +0 -0
  109. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_typed_settings.py +0 -0
  110. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_types.py +0 -0
  111. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_typing.py +0 -0
  112. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_typing_funcs/__init__.py +0 -0
  113. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_typing_funcs/no_future.py +0 -0
  114. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_typing_funcs/with_future.py +0 -0
  115. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_tzdata.py +0 -0
  116. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_tzlocal.py +0 -0
  117. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_uuid.py +0 -0
  118. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_version.py +0 -0
  119. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_warnings.py +0 -0
  120. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_whenever.py +0 -0
  121. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_yield_access/__init__.py +0 -0
  122. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_yield_access/script.py +0 -0
  123. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_yield_access/script.sh +0 -0
  124. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_zipfile.py +0 -0
  125. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/tests/test_zoneinfo.py +0 -0
  126. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/altair.py +0 -0
  127. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/asyncio.py +0 -0
  128. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/atomicwrites.py +0 -0
  129. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/atools.py +0 -0
  130. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/cachetools.py +0 -0
  131. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/click.py +0 -0
  132. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/concurrent.py +0 -0
  133. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/contextlib.py +0 -0
  134. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/contextvars.py +0 -0
  135. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/cryptography.py +0 -0
  136. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/cvxpy.py +0 -0
  137. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/dataclasses.py +0 -0
  138. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/enum.py +0 -0
  139. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/errors.py +0 -0
  140. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/eventkit.py +0 -0
  141. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/fastapi.py +0 -0
  142. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/fpdf2.py +0 -0
  143. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/functions.py +0 -0
  144. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/functools.py +0 -0
  145. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/getpass.py +0 -0
  146. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/gzip.py +0 -0
  147. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/hashlib.py +0 -0
  148. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/http.py +0 -0
  149. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/hypothesis.py +0 -0
  150. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/importlib.py +0 -0
  151. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/inflect.py +0 -0
  152. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/ipython.py +0 -0
  153. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/iterables.py +0 -0
  154. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/json.py +0 -0
  155. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/jupyter.py +0 -0
  156. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/libcst.py +0 -0
  157. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/lightweight_charts.py +0 -0
  158. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/logging.py +0 -0
  159. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/math.py +0 -0
  160. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/memory_profiler.py +0 -0
  161. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/modules.py +0 -0
  162. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/more_itertools.py +0 -0
  163. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/numpy.py +0 -0
  164. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/operator.py +0 -0
  165. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/optuna.py +0 -0
  166. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/orjson.py +0 -0
  167. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/os.py +0 -0
  168. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/parse.py +0 -0
  169. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/pathlib.py +0 -0
  170. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/pickle.py +0 -0
  171. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/platform.py +0 -0
  172. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/polars_ols.py +0 -0
  173. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/postgres.py +0 -0
  174. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/pottery.py +0 -0
  175. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/pqdm.py +0 -0
  176. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/psutil.py +0 -0
  177. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/py.typed +0 -0
  178. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/pyinstrument.py +0 -0
  179. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/pytest.py +0 -0
  180. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/pytest_plugins/__init__.py +0 -0
  181. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/pytest_plugins/pytest_randomly.py +0 -0
  182. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/pytest_plugins/pytest_regressions.py +0 -0
  183. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/pytest_regressions.py +0 -0
  184. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/random.py +0 -0
  185. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/re.py +0 -0
  186. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/redis.py +0 -0
  187. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/reprlib.py +0 -0
  188. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/scipy.py +0 -0
  189. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/sentinel.py +0 -0
  190. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/shelve.py +0 -0
  191. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/slack_sdk.py +0 -0
  192. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/socket.py +0 -0
  193. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/sqlalchemy.py +0 -0
  194. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/sqlalchemy_polars.py +0 -0
  195. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/statsmodels.py +0 -0
  196. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/string.py +0 -0
  197. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/tempfile.py +0 -0
  198. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/text.py +0 -0
  199. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/threading.py +0 -0
  200. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/timer.py +0 -0
  201. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/traceback.py +0 -0
  202. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/typed_settings.py +0 -0
  203. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/types.py +0 -0
  204. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/typing.py +0 -0
  205. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/tzdata.py +0 -0
  206. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/tzlocal.py +0 -0
  207. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/uuid.py +0 -0
  208. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/version.py +0 -0
  209. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/warnings.py +0 -0
  210. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/whenever.py +0 -0
  211. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/src/utilities/zipfile.py +0 -0
  212. {dycw_utilities-0.153.2 → dycw_utilities-0.153.3}/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.2
3
+ Version: 0.153.3
4
4
  Author-email: Derek Wan <d.wan@icloud.com>
5
5
  License-File: LICENSE
6
6
  Requires-Python: >=3.12
@@ -190,7 +190,7 @@ slack-sdk-test = [
190
190
  "aiohttp",
191
191
  ]
192
192
  sqlalchemy = [
193
- "sqlalchemy >=2.0.41, <2.1",
193
+ "sqlalchemy >=2.0.42, <2.1",
194
194
  "psycopg",
195
195
  ]
196
196
  sqlalchemy-polars = [
@@ -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.2"
232
+ version = "0.153.3"
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.2"
265
+ current_version = "0.153.3"
266
266
 
267
267
  [[tool.bumpversion.files]]
268
268
  filename = "src/utilities/__init__.py"
@@ -58,7 +58,7 @@ from polars.exceptions import ComputeError
58
58
  from polars.schema import Schema
59
59
  from polars.testing import assert_frame_equal, assert_series_equal
60
60
  from pytest import mark, param, raises
61
- from whenever import TimeZoneNotFoundError
61
+ from whenever import Time, TimeZoneNotFoundError, ZonedDateTime
62
62
 
63
63
  import utilities.polars
64
64
  from utilities.hypothesis import (
@@ -173,7 +173,9 @@ from utilities.polars import (
173
173
  nan_sum_agg,
174
174
  nan_sum_cols,
175
175
  normal,
176
+ offset_datetime,
176
177
  order_of_magnitude,
178
+ period_range,
177
179
  read_dataframe,
178
180
  read_series,
179
181
  reify_exprs,
@@ -2205,6 +2207,15 @@ class TestNormal:
2205
2207
  assert series.is_finite().all()
2206
2208
 
2207
2209
 
2210
+ class TestOffsetDateTime:
2211
+ @mark.parametrize(("n", "time"), [param(1, Time(13, 30)), param(2, Time(15))])
2212
+ def test_main(self, *, n: int, time: Time) -> None:
2213
+ datetime = ZonedDateTime(2000, 1, 1, 12, tz=UTC.key)
2214
+ result = offset_datetime(datetime, "1h30m", n=n)
2215
+ expected = datetime.replace_time(time)
2216
+ assert result == expected
2217
+
2218
+
2208
2219
  class TestOrderOfMagnitude:
2209
2220
  @given(
2210
2221
  sign=sampled_from([1, -1]),
@@ -2231,6 +2242,19 @@ class TestOrderOfMagnitude:
2231
2242
  assert (res_int == exp_int).all()
2232
2243
 
2233
2244
 
2245
+ class TestPeriodRange:
2246
+ start: ClassVar[ZonedDateTime] = ZonedDateTime(2000, 1, 1, 12, tz=UTC.key)
2247
+ end: ClassVar[ZonedDateTime] = ZonedDateTime(2000, 1, 1, 15, tz=UTC.key)
2248
+
2249
+ @mark.parametrize("end_or_length", [param(end), param(3)])
2250
+ def test_main(self, *, end_or_length: ZonedDateTime | int) -> None:
2251
+ rng = period_range(self.start, end_or_length, interval="1h", eager=True)
2252
+ assert len(rng) == 3
2253
+ assert rng.dtype == zoned_datetime_period_dtype()
2254
+ assert rng[0]["start"] == self.start.py_datetime()
2255
+ assert rng[-1]["end"] == self.end.py_datetime()
2256
+
2257
+
2234
2258
  class TestReifyExprs:
2235
2259
  @given(length=hypothesis.strategies.integers(0, 10), name=text_ascii())
2236
2260
  def test_one_expr(self, *, length: int, name: str) -> None:
@@ -1,3 +1,3 @@
1
1
  from __future__ import annotations
2
2
 
3
- __version__ = "0.153.2"
3
+ __version__ = "0.153.3"
@@ -33,6 +33,7 @@ from polars import (
33
33
  any_horizontal,
34
34
  col,
35
35
  concat,
36
+ datetime_range,
36
37
  int_range,
37
38
  lit,
38
39
  struct,
@@ -49,6 +50,7 @@ from polars.exceptions import (
49
50
  )
50
51
  from polars.schema import Schema
51
52
  from polars.testing import assert_frame_equal, assert_series_equal
53
+ from whenever import ZonedDateTime
52
54
 
53
55
  from utilities.dataclasses import _YieldFieldsInstance, yield_fields
54
56
  from utilities.errors import ImpossibleCaseError
@@ -129,6 +131,7 @@ DatetimeUSEastern = Datetime(time_zone="US/Eastern")
129
131
  DatetimeUTC = Datetime(time_zone="UTC")
130
132
  _FINITE_EWM_MIN_WEIGHT = 0.9999
131
133
 
134
+
132
135
  ##
133
136
 
134
137
 
@@ -2021,6 +2024,19 @@ def normal(
2021
2024
  ##
2022
2025
 
2023
2026
 
2027
+ def offset_datetime(
2028
+ datetime: ZonedDateTime, offset: str, /, *, n: int = 1
2029
+ ) -> ZonedDateTime:
2030
+ """Offset a datetime as `polars` would."""
2031
+ sr = Series(values=[datetime.py_datetime()])
2032
+ for _ in range(n):
2033
+ sr = sr.dt.offset_by(offset)
2034
+ return ZonedDateTime.from_py_datetime(sr.item())
2035
+
2036
+
2037
+ ##
2038
+
2039
+
2024
2040
  @overload
2025
2041
  def order_of_magnitude(column: ExprLike, /, *, round_: bool = False) -> Expr: ...
2026
2042
  @overload
@@ -2041,6 +2057,75 @@ def order_of_magnitude(
2041
2057
  ##
2042
2058
 
2043
2059
 
2060
+ @overload
2061
+ def period_range(
2062
+ start: ZonedDateTime,
2063
+ end_or_length: ZonedDateTime | int,
2064
+ /,
2065
+ *,
2066
+ interval: str = "1d",
2067
+ time_unit: TimeUnit | None = None,
2068
+ time_zone: TimeZoneLike | None = None,
2069
+ eager: Literal[True],
2070
+ ) -> Series: ...
2071
+ @overload
2072
+ def period_range(
2073
+ start: ZonedDateTime,
2074
+ end_or_length: ZonedDateTime | int,
2075
+ /,
2076
+ *,
2077
+ interval: str = "1d",
2078
+ time_unit: TimeUnit | None = None,
2079
+ time_zone: TimeZoneLike | None = None,
2080
+ eager: Literal[False] = False,
2081
+ ) -> Expr: ...
2082
+ @overload
2083
+ def period_range(
2084
+ start: ZonedDateTime,
2085
+ end_or_length: ZonedDateTime | int,
2086
+ /,
2087
+ *,
2088
+ interval: str = "1d",
2089
+ time_unit: TimeUnit | None = None,
2090
+ time_zone: TimeZoneLike | None = None,
2091
+ eager: bool = False,
2092
+ ) -> Series | Expr: ...
2093
+ def period_range(
2094
+ start: ZonedDateTime,
2095
+ end_or_length: ZonedDateTime | int,
2096
+ /,
2097
+ *,
2098
+ interval: str = "1d",
2099
+ time_unit: TimeUnit | None = None,
2100
+ time_zone: TimeZoneLike | None = None,
2101
+ eager: bool = False,
2102
+ ) -> Series | Expr:
2103
+ """Construct a period range."""
2104
+ time_zone_use = None if time_zone is None else ensure_time_zone(time_zone).key
2105
+ match end_or_length:
2106
+ case ZonedDateTime() as end:
2107
+ ...
2108
+ case int() as length:
2109
+ end = offset_datetime(start, interval, n=length)
2110
+ case never:
2111
+ assert_never(never)
2112
+ starts = datetime_range(
2113
+ start.py_datetime(),
2114
+ end.py_datetime(),
2115
+ interval,
2116
+ closed="left",
2117
+ time_unit=time_unit,
2118
+ time_zone=time_zone_use,
2119
+ eager=eager,
2120
+ ).alias("start")
2121
+ ends = (starts.dt.offset_by(interval)).alias("end")
2122
+ period = struct(starts, ends)
2123
+ return try_reify_expr(period, starts, ends)
2124
+
2125
+
2126
+ ##
2127
+
2128
+
2044
2129
  def reify_exprs(
2045
2130
  *exprs: IntoExprColumn, **named_exprs: IntoExprColumn
2046
2131
  ) -> Expr | Series | DataFrame:
@@ -2529,7 +2614,9 @@ __all__ = [
2529
2614
  "nan_sum_agg",
2530
2615
  "nan_sum_cols",
2531
2616
  "normal",
2617
+ "offset_datetime",
2532
2618
  "order_of_magnitude",
2619
+ "period_range",
2533
2620
  "read_dataframe",
2534
2621
  "read_series",
2535
2622
  "replace_time_zone",