dycw-utilities 0.153.3__tar.gz → 0.153.5__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.3 → dycw_utilities-0.153.5}/PKG-INFO +1 -1
  2. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/pyproject.toml +2 -2
  3. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_polars.py +56 -0
  4. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/__init__.py +1 -1
  5. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/polars.py +64 -32
  6. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/types.py +2 -0
  7. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/.gitignore +0 -0
  8. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/LICENSE +0 -0
  9. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/README.md +0 -0
  10. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/__init__.py +0 -0
  11. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/conftest.py +0 -0
  12. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/modules/__init__.py +0 -0
  13. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/modules/package_missing/__init__.py +0 -0
  14. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/modules/package_missing/module.py +0 -0
  15. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/modules/package_with/__init__.py +0 -0
  16. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/modules/package_with/outer_1.py +0 -0
  17. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/modules/package_with/outer_2.py +0 -0
  18. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
  19. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
  20. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
  21. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
  22. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/modules/package_without/__init__.py +0 -0
  23. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/modules/package_without/module_1.py +0 -0
  24. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/modules/package_without/module_2.py +0 -0
  25. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/modules/standalone.py +0 -0
  26. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/modules/with_imports.py +0 -0
  27. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
  28. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
  29. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
  30. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
  31. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
  32. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
  33. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
  34. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
  35. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_altair.py +0 -0
  36. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_asyncio.py +0 -0
  37. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_atomicwrites.py +0 -0
  38. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_atools.py +0 -0
  39. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_cachetools.py +0 -0
  40. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_click.py +0 -0
  41. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_concurrent.py +0 -0
  42. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_contextlib.py +0 -0
  43. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_contextvars.py +0 -0
  44. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_cryptography.py +0 -0
  45. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_cvxpy.py +0 -0
  46. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_dataclasses.py +0 -0
  47. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_enum.py +0 -0
  48. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_errors.py +0 -0
  49. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_eventkit.py +0 -0
  50. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_fastapi.py +0 -0
  51. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_fpdf2.py +0 -0
  52. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_functions.py +0 -0
  53. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_functools.py +0 -0
  54. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_getpass.py +0 -0
  55. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_gzip.py +0 -0
  56. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_hashlib.py +0 -0
  57. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_http.py +0 -0
  58. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_hypothesis.py +0 -0
  59. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_importlib.py +0 -0
  60. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_inflect.py +0 -0
  61. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_ipython.py +0 -0
  62. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_iterables.py +0 -0
  63. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_json.py +0 -0
  64. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_jupyter.py +0 -0
  65. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_libcst.py +0 -0
  66. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_lightweight_charts.py +0 -0
  67. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_logging.py +0 -0
  68. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_math.py +0 -0
  69. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_memory_profiler.py +0 -0
  70. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_modules.py +0 -0
  71. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_more_itertools.py +0 -0
  72. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_numpy.py +0 -0
  73. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_objects/__init__.py +0 -0
  74. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_objects/objects.py +0 -0
  75. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_operator.py +0 -0
  76. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_optuna.py +0 -0
  77. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_orjson.py +0 -0
  78. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_os.py +0 -0
  79. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_parse.py +0 -0
  80. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_pathlib.py +0 -0
  81. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_pickle.py +0 -0
  82. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_platform.py +0 -0
  83. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_polars_ols.py +0 -0
  84. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_postgres.py +0 -0
  85. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_pottery.py +0 -0
  86. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_pqdm.py +0 -0
  87. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_psutil.py +0 -0
  88. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_pyinstrument.py +0 -0
  89. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_pytest.py +0 -0
  90. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_pytest_randomly.py +0 -0
  91. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_pytest_regressions.py +0 -0
  92. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_random.py +0 -0
  93. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_re.py +0 -0
  94. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_redis.py +0 -0
  95. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_reprlib.py +0 -0
  96. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_scipy.py +0 -0
  97. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_sentinel.py +0 -0
  98. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_shelve.py +0 -0
  99. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_slack_sdk.py +0 -0
  100. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_socket.py +0 -0
  101. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_sqlalchemy.py +0 -0
  102. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_sqlalchemy_polars.py +0 -0
  103. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_statsmodels.py +0 -0
  104. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_string.py +0 -0
  105. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_tempfile.py +0 -0
  106. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_text.py +0 -0
  107. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_threading.py +0 -0
  108. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_timer.py +0 -0
  109. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_traceback.py +0 -0
  110. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_typed_settings.py +0 -0
  111. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_types.py +0 -0
  112. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_typing.py +0 -0
  113. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_typing_funcs/__init__.py +0 -0
  114. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_typing_funcs/no_future.py +0 -0
  115. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_typing_funcs/with_future.py +0 -0
  116. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_tzdata.py +0 -0
  117. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_tzlocal.py +0 -0
  118. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_uuid.py +0 -0
  119. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_version.py +0 -0
  120. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_warnings.py +0 -0
  121. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_whenever.py +0 -0
  122. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_yield_access/__init__.py +0 -0
  123. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_yield_access/script.py +0 -0
  124. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_yield_access/script.sh +0 -0
  125. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_zipfile.py +0 -0
  126. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/tests/test_zoneinfo.py +0 -0
  127. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/altair.py +0 -0
  128. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/asyncio.py +0 -0
  129. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/atomicwrites.py +0 -0
  130. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/atools.py +0 -0
  131. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/cachetools.py +0 -0
  132. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/click.py +0 -0
  133. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/concurrent.py +0 -0
  134. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/contextlib.py +0 -0
  135. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/contextvars.py +0 -0
  136. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/cryptography.py +0 -0
  137. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/cvxpy.py +0 -0
  138. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/dataclasses.py +0 -0
  139. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/enum.py +0 -0
  140. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/errors.py +0 -0
  141. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/eventkit.py +0 -0
  142. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/fastapi.py +0 -0
  143. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/fpdf2.py +0 -0
  144. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/functions.py +0 -0
  145. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/functools.py +0 -0
  146. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/getpass.py +0 -0
  147. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/gzip.py +0 -0
  148. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/hashlib.py +0 -0
  149. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/http.py +0 -0
  150. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/hypothesis.py +0 -0
  151. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/importlib.py +0 -0
  152. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/inflect.py +0 -0
  153. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/ipython.py +0 -0
  154. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/iterables.py +0 -0
  155. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/json.py +0 -0
  156. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/jupyter.py +0 -0
  157. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/libcst.py +0 -0
  158. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/lightweight_charts.py +0 -0
  159. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/logging.py +0 -0
  160. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/math.py +0 -0
  161. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/memory_profiler.py +0 -0
  162. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/modules.py +0 -0
  163. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/more_itertools.py +0 -0
  164. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/numpy.py +0 -0
  165. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/operator.py +0 -0
  166. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/optuna.py +0 -0
  167. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/orjson.py +0 -0
  168. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/os.py +0 -0
  169. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/parse.py +0 -0
  170. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/pathlib.py +0 -0
  171. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/pickle.py +0 -0
  172. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/platform.py +0 -0
  173. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/polars_ols.py +0 -0
  174. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/postgres.py +0 -0
  175. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/pottery.py +0 -0
  176. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/pqdm.py +0 -0
  177. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/psutil.py +0 -0
  178. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/py.typed +0 -0
  179. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/pyinstrument.py +0 -0
  180. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/pytest.py +0 -0
  181. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/pytest_plugins/__init__.py +0 -0
  182. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/pytest_plugins/pytest_randomly.py +0 -0
  183. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/pytest_plugins/pytest_regressions.py +0 -0
  184. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/pytest_regressions.py +0 -0
  185. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/random.py +0 -0
  186. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/re.py +0 -0
  187. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/redis.py +0 -0
  188. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/reprlib.py +0 -0
  189. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/scipy.py +0 -0
  190. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/sentinel.py +0 -0
  191. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/shelve.py +0 -0
  192. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/slack_sdk.py +0 -0
  193. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/socket.py +0 -0
  194. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/sqlalchemy.py +0 -0
  195. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/sqlalchemy_polars.py +0 -0
  196. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/statsmodels.py +0 -0
  197. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/string.py +0 -0
  198. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/tempfile.py +0 -0
  199. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/text.py +0 -0
  200. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/threading.py +0 -0
  201. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/timer.py +0 -0
  202. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/traceback.py +0 -0
  203. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/typed_settings.py +0 -0
  204. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/typing.py +0 -0
  205. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/tzdata.py +0 -0
  206. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/tzlocal.py +0 -0
  207. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/uuid.py +0 -0
  208. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/version.py +0 -0
  209. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/warnings.py +0 -0
  210. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/whenever.py +0 -0
  211. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/src/utilities/zipfile.py +0 -0
  212. {dycw_utilities-0.153.3 → dycw_utilities-0.153.5}/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.3
3
+ Version: 0.153.5
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.3"
232
+ version = "0.153.5"
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.3"
265
+ current_version = "0.153.5"
266
266
 
267
267
  [[tool.bumpversion.files]]
268
268
  filename = "src/utilities/__init__.py"
@@ -84,6 +84,7 @@ from utilities.polars import (
84
84
  DatetimeUSEastern,
85
85
  DatetimeUTC,
86
86
  DropNullStructSeriesError,
87
+ ExprOrSeries,
87
88
  FiniteEWMMeanError,
88
89
  InsertAfterError,
89
90
  InsertBeforeError,
@@ -132,6 +133,10 @@ from utilities.polars import (
132
133
  ac_halflife,
133
134
  acf,
134
135
  adjust_frequencies,
136
+ all_dataframe_columns,
137
+ all_series,
138
+ any_dataframe_columns,
139
+ any_series,
135
140
  append_dataclass,
136
141
  are_frames_equal,
137
142
  bernoulli,
@@ -205,6 +210,7 @@ if TYPE_CHECKING:
205
210
  from collections.abc import Callable, Iterable, Mapping, Sequence
206
211
  from zoneinfo import ZoneInfo
207
212
 
213
+ from _pytest.mark import ParameterSet
208
214
  from polars._typing import IntoExprColumn, PolarsDataType, SchemaDict
209
215
  from polars.datatypes import DataTypeClass
210
216
 
@@ -281,6 +287,56 @@ class TestAdjustFrequencies:
281
287
  assert isinstance(result, Series)
282
288
 
283
289
 
290
+ class TestAnyAllDataFrameColumnsSeries:
291
+ cases: ClassVar[list[ParameterSet]] = [
292
+ param(int_range(end=pl.len()) % 2 == 0),
293
+ param(int_range(end=4, eager=True) % 2 == 0),
294
+ ]
295
+ series: ClassVar[Series] = Series(
296
+ name="x", values=[True, True, False, False], dtype=Boolean
297
+ )
298
+ df: ClassVar[DataFrame] = series.to_frame()
299
+ exp_all: ClassVar[Series] = Series(
300
+ name="x", values=[True, False, False, False], dtype=Boolean
301
+ )
302
+ exp_any: ClassVar[Series] = Series(
303
+ name="x", values=[True, True, True, False], dtype=Boolean
304
+ )
305
+ exp_empty: ClassVar[Series] = Series(
306
+ name="x", values=[True, False, True, False], dtype=Boolean
307
+ )
308
+
309
+ @mark.parametrize("column", cases)
310
+ def test_df_all(self, *, column: ExprOrSeries) -> None:
311
+ result = all_dataframe_columns(self.df, "x", column)
312
+ assert_series_equal(result, self.exp_all)
313
+
314
+ @mark.parametrize("column", cases)
315
+ def test_df_any(self, *, column: ExprOrSeries) -> None:
316
+ result = any_dataframe_columns(self.df, "x", column)
317
+ assert_series_equal(result, self.exp_any)
318
+
319
+ @mark.parametrize("column", cases)
320
+ def test_df_all_empty(self, *, column: ExprOrSeries) -> None:
321
+ result = all_dataframe_columns(self.df, column.alias("x"))
322
+ assert_series_equal(result, self.exp_empty)
323
+
324
+ @mark.parametrize("column", cases)
325
+ def test_df_any_empty(self, *, column: ExprOrSeries) -> None:
326
+ result = any_dataframe_columns(self.df, column.alias("x"))
327
+ assert_series_equal(result, self.exp_empty)
328
+
329
+ @mark.parametrize("column", cases)
330
+ def test_series_all(self, *, column: ExprOrSeries) -> None:
331
+ result = all_series(self.series, column)
332
+ assert_series_equal(result, self.exp_all)
333
+
334
+ @mark.parametrize("column", cases)
335
+ def test_series_any_any_any(self, *, column: ExprOrSeries) -> None:
336
+ result = any_series(self.series, column)
337
+ assert_series_equal(result, self.exp_any)
338
+
339
+
284
340
  class TestAppendDataClass:
285
341
  @given(
286
342
  data=fixed_dictionaries({
@@ -1,3 +1,3 @@
1
1
  from __future__ import annotations
2
2
 
3
- __version__ = "0.153.3"
3
+ __version__ = "0.153.5"
@@ -124,6 +124,7 @@ if TYPE_CHECKING:
124
124
 
125
125
 
126
126
  type ExprLike = MaybeStr[Expr]
127
+ type ExprOrSeries = Expr | Series
127
128
  DatetimeHongKong = Datetime(time_zone="Asia/Hong_Kong")
128
129
  DatetimeTokyo = Datetime(time_zone="Asia/Tokyo")
129
130
  DatetimeUSCentral = Datetime(time_zone="US/Central")
@@ -241,11 +242,6 @@ def _acf_process_qstats_pvalues(qstats: NDArrayF, pvalues: NDArrayF, /) -> DataF
241
242
  ##
242
243
 
243
244
 
244
- # def acf_halflife(series: Series,/)
245
-
246
- ##
247
-
248
-
249
245
  def adjust_frequencies(
250
246
  series: Series,
251
247
  /,
@@ -267,6 +263,37 @@ def adjust_frequencies(
267
263
  ##
268
264
 
269
265
 
266
+ def all_dataframe_columns(
267
+ df: DataFrame, expr: IntoExprColumn, /, *exprs: IntoExprColumn
268
+ ) -> Series:
269
+ """Return a DataFrame column with `AND` applied to additional exprs/series."""
270
+ name = get_expr_name(df, expr)
271
+ return df.select(all_horizontal(expr, *exprs).alias(name))[name]
272
+
273
+
274
+ def any_dataframe_columns(
275
+ df: DataFrame, expr: IntoExprColumn, /, *exprs: IntoExprColumn
276
+ ) -> Series:
277
+ """Return a DataFrame column with `OR` applied to additional exprs/series."""
278
+ name = get_expr_name(df, expr)
279
+ return df.select(any_horizontal(expr, *exprs).alias(name))[name]
280
+
281
+
282
+ def all_series(series: Series, /, *columns: ExprOrSeries) -> Series:
283
+ """Return a Series with `AND` applied to additional exprs/series."""
284
+ return all_dataframe_columns(series.to_frame(), series.name, *columns)
285
+
286
+
287
+ def any_series(series: Series, /, *columns: ExprOrSeries) -> Series:
288
+ """Return a Series with `OR` applied to additional exprs/series."""
289
+ df = series.to_frame()
290
+ name = series.name
291
+ return df.select(any_horizontal(name, *columns).alias(name))[name]
292
+
293
+
294
+ ##
295
+
296
+
270
297
  def append_dataclass(df: DataFrame, obj: Dataclass, /) -> DataFrame:
271
298
  """Append a dataclass object to a DataFrame."""
272
299
  non_null_fields = {k: v for k, v in asdict(obj).items() if v is not None}
@@ -430,8 +457,8 @@ def ceil_datetime(column: ExprLike, every: ExprLike, /) -> Expr: ...
430
457
  @overload
431
458
  def ceil_datetime(column: Series, every: ExprLike, /) -> Series: ...
432
459
  @overload
433
- def ceil_datetime(column: IntoExprColumn, every: ExprLike, /) -> Expr | Series: ...
434
- def ceil_datetime(column: IntoExprColumn, every: ExprLike, /) -> Expr | Series:
460
+ def ceil_datetime(column: IntoExprColumn, every: ExprLike, /) -> ExprOrSeries: ...
461
+ def ceil_datetime(column: IntoExprColumn, every: ExprLike, /) -> ExprOrSeries:
435
462
  """Compute the `ceil` of a datetime column."""
436
463
  column = ensure_expr_or_series(column)
437
464
  rounded = column.dt.round(every)
@@ -852,13 +879,13 @@ def cross(
852
879
  up_or_down: Literal["up", "down"],
853
880
  other: Number | IntoExprColumn,
854
881
  /,
855
- ) -> Expr | Series: ...
882
+ ) -> ExprOrSeries: ...
856
883
  def cross(
857
884
  expr: IntoExprColumn,
858
885
  up_or_down: Literal["up", "down"],
859
886
  other: Number | IntoExprColumn,
860
887
  /,
861
- ) -> Expr | Series:
888
+ ) -> ExprOrSeries:
862
889
  """Compute when a cross occurs."""
863
890
  return _cross_or_touch(expr, "cross", up_or_down, other)
864
891
 
@@ -877,13 +904,13 @@ def touch(
877
904
  up_or_down: Literal["up", "down"],
878
905
  other: Number | IntoExprColumn,
879
906
  /,
880
- ) -> Expr | Series: ...
907
+ ) -> ExprOrSeries: ...
881
908
  def touch(
882
909
  expr: IntoExprColumn,
883
910
  up_or_down: Literal["up", "down"],
884
911
  other: Number | IntoExprColumn,
885
912
  /,
886
- ) -> Expr | Series:
913
+ ) -> ExprOrSeries:
887
914
  """Compute when a touch occurs."""
888
915
  return _cross_or_touch(expr, "touch", up_or_down, other)
889
916
 
@@ -894,7 +921,7 @@ def _cross_or_touch(
894
921
  up_or_down: Literal["up", "down"],
895
922
  other: Number | IntoExprColumn,
896
923
  /,
897
- ) -> Expr | Series:
924
+ ) -> ExprOrSeries:
898
925
  """Compute when a column crosses/touches a threshold."""
899
926
  expr = ensure_expr_or_series(expr)
900
927
  match other:
@@ -966,7 +993,7 @@ def cross_rolling_quantile(
966
993
  weights: list[float] | None = None,
967
994
  min_samples: int | None = None,
968
995
  center: bool = False,
969
- ) -> Expr | Series: ...
996
+ ) -> ExprOrSeries: ...
970
997
  def cross_rolling_quantile(
971
998
  expr: IntoExprColumn,
972
999
  up_or_down: Literal["up", "down"],
@@ -978,7 +1005,7 @@ def cross_rolling_quantile(
978
1005
  weights: list[float] | None = None,
979
1006
  min_samples: int | None = None,
980
1007
  center: bool = False,
981
- ) -> Expr | Series:
1008
+ ) -> ExprOrSeries:
982
1009
  """Compute when a column crosses its rolling quantile."""
983
1010
  expr = ensure_expr_or_series(expr)
984
1011
  rolling = expr.rolling_quantile(
@@ -1183,8 +1210,8 @@ def ensure_expr_or_series(column: ExprLike, /) -> Expr: ...
1183
1210
  @overload
1184
1211
  def ensure_expr_or_series(column: Series, /) -> Series: ...
1185
1212
  @overload
1186
- def ensure_expr_or_series(column: IntoExprColumn, /) -> Expr | Series: ...
1187
- def ensure_expr_or_series(column: IntoExprColumn, /) -> Expr | Series:
1213
+ def ensure_expr_or_series(column: IntoExprColumn, /) -> ExprOrSeries: ...
1214
+ def ensure_expr_or_series(column: IntoExprColumn, /) -> ExprOrSeries:
1188
1215
  """Ensure a column expression or Series is returned."""
1189
1216
  return col(column) if isinstance(column, str) else column
1190
1217
 
@@ -1194,7 +1221,7 @@ def ensure_expr_or_series(column: IntoExprColumn, /) -> Expr | Series:
1194
1221
 
1195
1222
  def ensure_expr_or_series_many(
1196
1223
  *columns: IntoExprColumn, **named_columns: IntoExprColumn
1197
- ) -> Sequence[Expr | Series]:
1224
+ ) -> Sequence[ExprOrSeries]:
1198
1225
  """Ensure a set of column expressions and/or Series are returned."""
1199
1226
  args = map(ensure_expr_or_series, columns)
1200
1227
  kwargs = (ensure_expr_or_series(v).alias(k) for k, v in named_columns.items())
@@ -1236,7 +1263,7 @@ def finite_ewm_mean(
1236
1263
  half_life: float | None = None,
1237
1264
  alpha: float | None = None,
1238
1265
  min_weight: float = _FINITE_EWM_MIN_WEIGHT,
1239
- ) -> Expr | Series: ...
1266
+ ) -> ExprOrSeries: ...
1240
1267
  def finite_ewm_mean(
1241
1268
  column: IntoExprColumn,
1242
1269
  /,
@@ -1246,7 +1273,7 @@ def finite_ewm_mean(
1246
1273
  half_life: float | None = None,
1247
1274
  alpha: float | None = None,
1248
1275
  min_weight: float = _FINITE_EWM_MIN_WEIGHT,
1249
- ) -> Expr | Series:
1276
+ ) -> ExprOrSeries:
1250
1277
  """Compute a finite EWMA."""
1251
1278
  try:
1252
1279
  weights = _finite_ewm_weights(
@@ -1312,8 +1339,8 @@ def floor_datetime(column: ExprLike, every: ExprLike, /) -> Expr: ...
1312
1339
  @overload
1313
1340
  def floor_datetime(column: Series, every: ExprLike, /) -> Series: ...
1314
1341
  @overload
1315
- def floor_datetime(column: IntoExprColumn, every: ExprLike, /) -> Expr | Series: ...
1316
- def floor_datetime(column: IntoExprColumn, every: ExprLike, /) -> Expr | Series:
1342
+ def floor_datetime(column: IntoExprColumn, every: ExprLike, /) -> ExprOrSeries: ...
1343
+ def floor_datetime(column: IntoExprColumn, every: ExprLike, /) -> ExprOrSeries:
1317
1344
  """Compute the `floor` of a datetime column."""
1318
1345
  column = ensure_expr_or_series(column)
1319
1346
  rounded = column.dt.round(every)
@@ -1479,8 +1506,8 @@ def increasing_horizontal(*columns: ExprLike) -> Expr: ...
1479
1506
  @overload
1480
1507
  def increasing_horizontal(*columns: Series) -> Series: ...
1481
1508
  @overload
1482
- def increasing_horizontal(*columns: IntoExprColumn) -> Expr | Series: ...
1483
- def increasing_horizontal(*columns: IntoExprColumn) -> Expr | Series:
1509
+ def increasing_horizontal(*columns: IntoExprColumn) -> ExprOrSeries: ...
1510
+ def increasing_horizontal(*columns: IntoExprColumn) -> ExprOrSeries:
1484
1511
  """Check if a set of columns are increasing."""
1485
1512
  columns2 = ensure_expr_or_series_many(*columns)
1486
1513
  if len(columns2) == 0:
@@ -1493,8 +1520,8 @@ def decreasing_horizontal(*columns: ExprLike) -> Expr: ...
1493
1520
  @overload
1494
1521
  def decreasing_horizontal(*columns: Series) -> Series: ...
1495
1522
  @overload
1496
- def decreasing_horizontal(*columns: IntoExprColumn) -> Expr | Series: ...
1497
- def decreasing_horizontal(*columns: IntoExprColumn) -> Expr | Series:
1523
+ def decreasing_horizontal(*columns: IntoExprColumn) -> ExprOrSeries: ...
1524
+ def decreasing_horizontal(*columns: IntoExprColumn) -> ExprOrSeries:
1498
1525
  """Check if a set of columns are decreasing."""
1499
1526
  columns2 = ensure_expr_or_series_many(*columns)
1500
1527
  if len(columns2) == 0:
@@ -1653,13 +1680,13 @@ def is_near_event(
1653
1680
  before: int = 0,
1654
1681
  after: int = 0,
1655
1682
  **named_exprs: IntoExprColumn,
1656
- ) -> Expr | Series: ...
1683
+ ) -> ExprOrSeries: ...
1657
1684
  def is_near_event(
1658
1685
  *exprs: IntoExprColumn,
1659
1686
  before: int = 0,
1660
1687
  after: int = 0,
1661
1688
  **named_exprs: IntoExprColumn,
1662
- ) -> Expr | Series:
1689
+ ) -> ExprOrSeries:
1663
1690
  """Compute the rows near any event."""
1664
1691
  if before <= -1:
1665
1692
  raise _IsNearEventBeforeError(before=before)
@@ -2044,10 +2071,10 @@ def order_of_magnitude(column: Series, /, *, round_: bool = False) -> Series: ..
2044
2071
  @overload
2045
2072
  def order_of_magnitude(
2046
2073
  column: IntoExprColumn, /, *, round_: bool = False
2047
- ) -> Expr | Series: ...
2074
+ ) -> ExprOrSeries: ...
2048
2075
  def order_of_magnitude(
2049
2076
  column: IntoExprColumn, /, *, round_: bool = False
2050
- ) -> Expr | Series:
2077
+ ) -> ExprOrSeries:
2051
2078
  """Compute the order of magnitude of a column."""
2052
2079
  column = ensure_expr_or_series(column)
2053
2080
  result = column.abs().log10()
@@ -2448,7 +2475,7 @@ class _StructFromDataClassTypeError(StructFromDataClassError):
2448
2475
 
2449
2476
  def try_reify_expr(
2450
2477
  expr: IntoExprColumn, /, *exprs: IntoExprColumn, **named_exprs: IntoExprColumn
2451
- ) -> Expr | Series:
2478
+ ) -> ExprOrSeries:
2452
2479
  """Try reify an expression."""
2453
2480
  expr = ensure_expr_or_series(expr)
2454
2481
  all_exprs = ensure_expr_or_series_many(*exprs, **named_exprs)
@@ -2515,8 +2542,8 @@ def week_num(column: ExprLike, /, *, start: WeekDay = "mon") -> Expr: ...
2515
2542
  @overload
2516
2543
  def week_num(column: Series, /, *, start: WeekDay = "mon") -> Series: ...
2517
2544
  @overload
2518
- def week_num(column: IntoExprColumn, /, *, start: WeekDay = "mon") -> Expr | Series: ...
2519
- def week_num(column: IntoExprColumn, /, *, start: WeekDay = "mon") -> Expr | Series:
2545
+ def week_num(column: IntoExprColumn, /, *, start: WeekDay = "mon") -> ExprOrSeries: ...
2546
+ def week_num(column: IntoExprColumn, /, *, start: WeekDay = "mon") -> ExprOrSeries:
2520
2547
  """Compute the week number of a date column."""
2521
2548
  column = ensure_expr_or_series(column)
2522
2549
  epoch = column.dt.epoch(time_unit="d").alias("epoch")
@@ -2562,6 +2589,7 @@ __all__ = [
2562
2589
  "DatetimeUSEastern",
2563
2590
  "DatetimeUTC",
2564
2591
  "DropNullStructSeriesError",
2592
+ "ExprOrSeries",
2565
2593
  "FiniteEWMMeanError",
2566
2594
  "GetDataTypeOrSeriesTimeZoneError",
2567
2595
  "GetSeriesNumberOfDecimalsError",
@@ -2574,6 +2602,10 @@ __all__ = [
2574
2602
  "StructFromDataClassError",
2575
2603
  "acf",
2576
2604
  "adjust_frequencies",
2605
+ "all_dataframe_columns",
2606
+ "all_series",
2607
+ "any_dataframe_columns",
2608
+ "any_series",
2577
2609
  "append_dataclass",
2578
2610
  "are_frames_equal",
2579
2611
  "bernoulli",
@@ -118,6 +118,7 @@ IPv6AddressLike = MaybeStr[IPv6Address]
118
118
  type MaybeCollection[T] = T | Collection[T]
119
119
  type MaybeIterable[T] = T | Iterable[T]
120
120
  type MaybeList[T] = T | list[T]
121
+ type MaybeSet[T] = T | set[T] | frozenset[T]
121
122
  type SequenceLT[T] = list[T] | tuple[T, ...]
122
123
  # iterables - dervied
123
124
  type MaybeSequence[T] = T | SequenceLT[T]
@@ -303,6 +304,7 @@ __all__ = [
303
304
  "MaybeList",
304
305
  "MaybeSequence",
305
306
  "MaybeSequenceStr",
307
+ "MaybeSet",
306
308
  "MaybeStr",
307
309
  "MaybeType",
308
310
  "MonthDayLike",