dycw-utilities 0.159.0__tar.gz → 0.159.1__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 (209) hide show
  1. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/PKG-INFO +1 -1
  2. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/pyproject.toml +3 -3
  3. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_polars.py +33 -9
  4. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/__init__.py +1 -1
  5. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/polars.py +64 -26
  6. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/pytest_regressions.py +1 -3
  7. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/.gitignore +0 -0
  8. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/LICENSE +0 -0
  9. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/README.md +0 -0
  10. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/__init__.py +0 -0
  11. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/conftest.py +0 -0
  12. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/modules/__init__.py +0 -0
  13. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/modules/package_missing/__init__.py +0 -0
  14. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/modules/package_missing/module.py +0 -0
  15. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/modules/package_with/__init__.py +0 -0
  16. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/modules/package_with/outer_1.py +0 -0
  17. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/modules/package_with/outer_2.py +0 -0
  18. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
  19. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
  20. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
  21. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
  22. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/modules/package_without/__init__.py +0 -0
  23. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/modules/package_without/module_1.py +0 -0
  24. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/modules/package_without/module_2.py +0 -0
  25. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/modules/standalone.py +0 -0
  26. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/modules/with_imports.py +0 -0
  27. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
  28. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
  29. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
  30. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
  31. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
  32. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
  33. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
  34. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
  35. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_altair.py +0 -0
  36. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_asyncio.py +0 -0
  37. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_atomicwrites.py +0 -0
  38. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_atools.py +0 -0
  39. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_cachetools.py +0 -0
  40. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_click.py +0 -0
  41. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_concurrent.py +0 -0
  42. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_contextlib.py +0 -0
  43. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_contextvars.py +0 -0
  44. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_cryptography.py +0 -0
  45. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_cvxpy.py +0 -0
  46. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_dataclasses.py +0 -0
  47. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_enum.py +0 -0
  48. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_errors.py +0 -0
  49. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_eventkit.py +0 -0
  50. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_fastapi.py +0 -0
  51. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_fpdf2.py +0 -0
  52. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_functions.py +0 -0
  53. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_functools.py +0 -0
  54. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_getpass.py +0 -0
  55. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_gzip.py +0 -0
  56. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_hashlib.py +0 -0
  57. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_http.py +0 -0
  58. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_hypothesis.py +0 -0
  59. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_importlib.py +0 -0
  60. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_inflect.py +0 -0
  61. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_ipython.py +0 -0
  62. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_iterables.py +0 -0
  63. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_json.py +0 -0
  64. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_jupyter.py +0 -0
  65. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_libcst.py +0 -0
  66. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_lightweight_charts.py +0 -0
  67. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_logging.py +0 -0
  68. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_math.py +0 -0
  69. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_memory_profiler.py +0 -0
  70. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_modules.py +0 -0
  71. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_more_itertools.py +0 -0
  72. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_numpy.py +0 -0
  73. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_objects/__init__.py +0 -0
  74. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_objects/objects.py +0 -0
  75. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_operator.py +0 -0
  76. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_optuna.py +0 -0
  77. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_orjson.py +0 -0
  78. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_os.py +0 -0
  79. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_parse.py +0 -0
  80. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_pathlib.py +0 -0
  81. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_pickle.py +0 -0
  82. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_platform.py +0 -0
  83. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_polars_ols.py +0 -0
  84. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_postgres.py +0 -0
  85. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_pottery.py +0 -0
  86. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_pqdm.py +0 -0
  87. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_psutil.py +0 -0
  88. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_pyinstrument.py +0 -0
  89. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_pytest.py +0 -0
  90. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_pytest_randomly.py +0 -0
  91. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_pytest_regressions.py +0 -0
  92. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_random.py +0 -0
  93. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_re.py +0 -0
  94. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_redis.py +0 -0
  95. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_reprlib.py +0 -0
  96. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_scipy.py +0 -0
  97. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_sentinel.py +0 -0
  98. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_shelve.py +0 -0
  99. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_slack_sdk.py +0 -0
  100. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_socket.py +0 -0
  101. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_sqlalchemy.py +0 -0
  102. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_sqlalchemy_polars.py +0 -0
  103. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_statsmodels.py +0 -0
  104. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_string.py +0 -0
  105. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_tempfile.py +0 -0
  106. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_text.py +0 -0
  107. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_threading.py +0 -0
  108. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_timer.py +0 -0
  109. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_traceback.py +0 -0
  110. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_typed_settings.py +0 -0
  111. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_types.py +0 -0
  112. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_typing.py +0 -0
  113. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_typing_funcs/__init__.py +0 -0
  114. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_typing_funcs/no_future.py +0 -0
  115. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_typing_funcs/with_future.py +0 -0
  116. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_tzdata.py +0 -0
  117. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_tzlocal.py +0 -0
  118. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_uuid.py +0 -0
  119. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_version.py +0 -0
  120. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_warnings.py +0 -0
  121. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_whenever.py +0 -0
  122. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_zipfile.py +0 -0
  123. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/tests/test_zoneinfo.py +0 -0
  124. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/altair.py +0 -0
  125. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/asyncio.py +0 -0
  126. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/atomicwrites.py +0 -0
  127. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/atools.py +0 -0
  128. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/cachetools.py +0 -0
  129. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/click.py +0 -0
  130. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/concurrent.py +0 -0
  131. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/contextlib.py +0 -0
  132. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/contextvars.py +0 -0
  133. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/cryptography.py +0 -0
  134. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/cvxpy.py +0 -0
  135. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/dataclasses.py +0 -0
  136. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/enum.py +0 -0
  137. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/errors.py +0 -0
  138. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/eventkit.py +0 -0
  139. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/fastapi.py +0 -0
  140. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/fpdf2.py +0 -0
  141. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/functions.py +0 -0
  142. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/functools.py +0 -0
  143. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/getpass.py +0 -0
  144. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/gzip.py +0 -0
  145. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/hashlib.py +0 -0
  146. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/http.py +0 -0
  147. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/hypothesis.py +0 -0
  148. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/importlib.py +0 -0
  149. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/inflect.py +0 -0
  150. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/ipython.py +0 -0
  151. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/iterables.py +0 -0
  152. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/json.py +0 -0
  153. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/jupyter.py +0 -0
  154. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/libcst.py +0 -0
  155. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/lightweight_charts.py +0 -0
  156. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/logging.py +0 -0
  157. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/math.py +0 -0
  158. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/memory_profiler.py +0 -0
  159. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/modules.py +0 -0
  160. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/more_itertools.py +0 -0
  161. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/numpy.py +0 -0
  162. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/operator.py +0 -0
  163. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/optuna.py +0 -0
  164. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/orjson.py +0 -0
  165. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/os.py +0 -0
  166. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/parse.py +0 -0
  167. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/pathlib.py +0 -0
  168. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/pickle.py +0 -0
  169. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/platform.py +0 -0
  170. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/polars_ols.py +0 -0
  171. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/postgres.py +0 -0
  172. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/pottery.py +0 -0
  173. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/pqdm.py +0 -0
  174. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/psutil.py +0 -0
  175. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/py.typed +0 -0
  176. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/pyinstrument.py +0 -0
  177. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/pytest.py +0 -0
  178. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/pytest_plugins/__init__.py +0 -0
  179. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/pytest_plugins/pytest_randomly.py +0 -0
  180. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/pytest_plugins/pytest_regressions.py +0 -0
  181. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/random.py +0 -0
  182. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/re.py +0 -0
  183. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/redis.py +0 -0
  184. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/reprlib.py +0 -0
  185. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/scipy.py +0 -0
  186. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/sentinel.py +0 -0
  187. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/shelve.py +0 -0
  188. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/slack_sdk.py +0 -0
  189. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/socket.py +0 -0
  190. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/sqlalchemy.py +0 -0
  191. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/sqlalchemy_polars.py +0 -0
  192. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/statsmodels.py +0 -0
  193. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/string.py +0 -0
  194. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/tempfile.py +0 -0
  195. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/text.py +0 -0
  196. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/threading.py +0 -0
  197. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/timer.py +0 -0
  198. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/traceback.py +0 -0
  199. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/typed_settings.py +0 -0
  200. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/types.py +0 -0
  201. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/typing.py +0 -0
  202. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/tzdata.py +0 -0
  203. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/tzlocal.py +0 -0
  204. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/uuid.py +0 -0
  205. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/version.py +0 -0
  206. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/warnings.py +0 -0
  207. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/whenever.py +0 -0
  208. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/zipfile.py +0 -0
  209. {dycw_utilities-0.159.0 → dycw_utilities-0.159.1}/src/utilities/zoneinfo.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dycw-utilities
3
- Version: 0.159.0
3
+ Version: 0.159.1
4
4
  Author-email: Derek Wan <d.wan@icloud.com>
5
5
  License-File: LICENSE
6
6
  Requires-Python: >=3.12
@@ -118,7 +118,7 @@ orjson-test = [
118
118
  "polars",
119
119
  ]
120
120
  polars = [
121
- "polars >=1.32.2, <1.33",
121
+ "polars >=1.32.3, <1.33",
122
122
  ]
123
123
  polars-ols = [
124
124
  "polars-ols >=0.3.5, <0.4",
@@ -227,7 +227,7 @@ dependencies = [
227
227
  name = "dycw-utilities"
228
228
  readme = "README.md"
229
229
  requires-python = ">= 3.12"
230
- version = "0.159.0"
230
+ version = "0.159.1"
231
231
 
232
232
  [project.entry-points.pytest11]
233
233
  pytest-randomly = "utilities.pytest_plugins.pytest_randomly"
@@ -259,7 +259,7 @@ test = [
259
259
  # bump-my-version
260
260
  [tool.bumpversion]
261
261
  allow_dirty = true
262
- current_version = "0.159.0"
262
+ current_version = "0.159.1"
263
263
 
264
264
  [[tool.bumpversion.files]]
265
265
  filename = "src/utilities/__init__.py"
@@ -94,6 +94,8 @@ from utilities.polars import (
94
94
  FiniteEWMMeanError,
95
95
  InsertAfterError,
96
96
  InsertBeforeError,
97
+ OneColumnEmptyError,
98
+ OneColumnNonUniqueError,
97
99
  SetFirstRowAsColumnsError,
98
100
  TimePeriodDType,
99
101
  _check_polars_dataframe_predicates,
@@ -147,7 +149,6 @@ from utilities.polars import (
147
149
  boolean_value_counts,
148
150
  check_polars_dataframe,
149
151
  choice,
150
- collect_series,
151
152
  columns_to_dict,
152
153
  concat_series,
153
154
  convert_time_zone,
@@ -161,6 +162,7 @@ from utilities.polars import (
161
162
  ensure_data_type,
162
163
  ensure_expr_or_series,
163
164
  ensure_expr_or_series_many,
165
+ expr_to_series,
164
166
  finite_ewm_mean,
165
167
  get_data_type_or_series_time_zone,
166
168
  get_expr_name,
@@ -180,6 +182,7 @@ from utilities.polars import (
180
182
  nan_sum_cols,
181
183
  normal,
182
184
  offset_datetime,
185
+ one_column,
183
186
  order_of_magnitude,
184
187
  period_range,
185
188
  read_dataframe,
@@ -827,14 +830,6 @@ class TestChoice:
827
830
  assert series.is_in(list(elements)).all()
828
831
 
829
832
 
830
- class TestCollectSeries:
831
- def test_main(self) -> None:
832
- expr = int_range(end=10)
833
- series = collect_series(expr)
834
- expected = int_range(end=10, eager=True)
835
- assert_series_equal(series, expected)
836
-
837
-
838
833
  class TestColumnsToDict:
839
834
  def test_main(self) -> None:
840
835
  df = DataFrame(
@@ -1470,6 +1465,14 @@ class TestEnsureExprOrSeriesMany:
1470
1465
  assert isinstance(r, Expr | Series)
1471
1466
 
1472
1467
 
1468
+ class TestExprToSeries:
1469
+ def test_main(self) -> None:
1470
+ expr = int_range(end=10)
1471
+ series = expr_to_series(expr)
1472
+ expected = int_range(end=10, eager=True)
1473
+ assert_series_equal(series, expected)
1474
+
1475
+
1473
1476
  class TestFiniteEWMMean:
1474
1477
  alpha_0_75_values: ClassVar[list[float]] = [
1475
1478
  -8.269850726503885,
@@ -2239,6 +2242,27 @@ class TestOffsetDateTime:
2239
2242
  assert result == expected
2240
2243
 
2241
2244
 
2245
+ class TestOneColumn:
2246
+ def test_main(self) -> None:
2247
+ series = int_range(end=10, eager=True).alias("x")
2248
+ df = series.to_frame()
2249
+ result = one_column(df)
2250
+ assert_series_equal(result, series)
2251
+
2252
+ def test_error_empty(self) -> None:
2253
+ with raises(OneColumnEmptyError, match="DataFrame must not be empty"):
2254
+ _ = one_column(DataFrame())
2255
+
2256
+ def test_error_non_unique(self) -> None:
2257
+ x, y = [int_range(end=10, eager=True).alias(name) for name in ["x", "y"]]
2258
+ df = concat_series(x, y)
2259
+ with raises(
2260
+ OneColumnNonUniqueError,
2261
+ match="DataFrame must contain exactly one column; got 'x', 'y' and perhaps more",
2262
+ ):
2263
+ _ = one_column(df)
2264
+
2265
+
2242
2266
  class TestOrderOfMagnitude:
2243
2267
  @given(
2244
2268
  sign=sampled_from([1, -1]),
@@ -1,3 +1,3 @@
1
1
  from __future__ import annotations
2
2
 
3
- __version__ = "0.159.0"
3
+ __version__ = "0.159.1"
@@ -42,9 +42,9 @@ from polars import (
42
42
  from polars._typing import PolarsDataType
43
43
  from polars.datatypes import DataType, DataTypeClass
44
44
  from polars.exceptions import (
45
- ColumnNotFoundError, # pyright: ignore[reportAttributeAccessIssue]
45
+ ColumnNotFoundError,
46
46
  NoRowsReturnedError,
47
- OutOfBoundsError, # pyright: ignore[reportAttributeAccessIssue]
47
+ OutOfBoundsError,
48
48
  PolarsInefficientMapWarning,
49
49
  )
50
50
  from polars.schema import Schema
@@ -337,8 +337,8 @@ def are_frames_equal(
337
337
  check_column_order: bool = True,
338
338
  check_dtypes: bool = True,
339
339
  check_exact: bool = False,
340
- rtol: float = 1e-5,
341
- atol: float = 1e-8,
340
+ rel_tol: float = 1e-5,
341
+ abs_tol: float = 1e-8,
342
342
  categorical_as_str: bool = False,
343
343
  ) -> bool:
344
344
  """Check if two DataFrames are equal."""
@@ -350,8 +350,8 @@ def are_frames_equal(
350
350
  check_column_order=check_column_order,
351
351
  check_dtypes=check_dtypes,
352
352
  check_exact=check_exact,
353
- rtol=rtol,
354
- atol=atol,
353
+ rel_tol=rel_tol,
354
+ abs_tol=abs_tol,
355
355
  categorical_as_str=categorical_as_str,
356
356
  )
357
357
  except AssertionError:
@@ -783,15 +783,6 @@ def choice(
783
783
  ##
784
784
 
785
785
 
786
- def collect_series(expr: Expr, /) -> Series:
787
- """Collect a column expression into a Series."""
788
- data = DataFrame().with_columns(expr)
789
- return data[one(data.columns)]
790
-
791
-
792
- ##
793
-
794
-
795
786
  def columns_to_dict(df: DataFrame, key: str, value: str, /) -> dict[Any, Any]:
796
787
  """Map a pair of columns into a dictionary. Must be unique on `key`."""
797
788
  col_key = df[key]
@@ -1044,7 +1035,9 @@ def _dataclass_to_dataframe_cast(series: Series, /) -> Series:
1044
1035
  is_path = series.map_elements(make_isinstance(Path), return_dtype=Boolean).all()
1045
1036
  is_uuid = series.map_elements(make_isinstance(UUID), return_dtype=Boolean).all()
1046
1037
  if is_path or is_uuid:
1047
- with suppress_warnings(category=PolarsInefficientMapWarning):
1038
+ with suppress_warnings(
1039
+ category=cast("type[Warning]", PolarsInefficientMapWarning)
1040
+ ):
1048
1041
  return series.map_elements(str, return_dtype=String)
1049
1042
  if series.map_elements(make_isinstance(whenever.Time), return_dtype=Boolean).all():
1050
1043
  return series.map_elements(lambda x: x.py_time(), return_dtype=pl.Time)
@@ -1219,6 +1212,14 @@ def ensure_expr_or_series_many(
1219
1212
  ##
1220
1213
 
1221
1214
 
1215
+ def expr_to_series(expr: Expr, /) -> Series:
1216
+ """Collect a column expression into a Series."""
1217
+ return one_column(DataFrame().with_columns(expr))
1218
+
1219
+
1220
+ ##
1221
+
1222
+
1222
1223
  @overload
1223
1224
  def finite_ewm_mean(
1224
1225
  column: ExprLike,
@@ -1393,8 +1394,7 @@ def get_expr_name(obj: Series | DataFrame, expr: IntoExprColumn, /) -> str:
1393
1394
  case Series() as series:
1394
1395
  return get_expr_name(series.to_frame(), expr)
1395
1396
  case DataFrame() as df:
1396
- selected = df.select(expr)
1397
- return one(selected.columns)
1397
+ return one_column(df.select(expr)).name
1398
1398
  case never:
1399
1399
  assert_never(never)
1400
1400
 
@@ -1989,6 +1989,43 @@ def offset_datetime(
1989
1989
  ##
1990
1990
 
1991
1991
 
1992
+ def one_column(df: DataFrame, /) -> Series:
1993
+ """Return the unique column in a DataFrame."""
1994
+ try:
1995
+ return df[one(df.columns)]
1996
+ except OneEmptyError:
1997
+ raise OneColumnEmptyError(df=df) from None
1998
+ except OneNonUniqueError as error:
1999
+ raise OneColumnNonUniqueError(
2000
+ df=df, first=error.first, second=error.second
2001
+ ) from None
2002
+
2003
+
2004
+ @dataclass(kw_only=True, slots=True)
2005
+ class OneColumnError(Exception):
2006
+ df: DataFrame
2007
+
2008
+
2009
+ @dataclass(kw_only=True, slots=True)
2010
+ class OneColumnEmptyError(OneColumnError):
2011
+ @override
2012
+ def __str__(self) -> str:
2013
+ return "DataFrame must not be empty"
2014
+
2015
+
2016
+ @dataclass(kw_only=True, slots=True)
2017
+ class OneColumnNonUniqueError(OneColumnError):
2018
+ first: str
2019
+ second: str
2020
+
2021
+ @override
2022
+ def __str__(self) -> str:
2023
+ return f"DataFrame must contain exactly one column; got {self.first!r}, {self.second!r} and perhaps more"
2024
+
2025
+
2026
+ ##
2027
+
2028
+
1992
2029
  @overload
1993
2030
  def order_of_magnitude(column: ExprLike, /, *, round_: bool = False) -> Expr: ...
1994
2031
  @overload
@@ -2110,13 +2147,10 @@ def reify_exprs(
2110
2147
  .with_columns(*all_exprs)
2111
2148
  .drop("_index")
2112
2149
  )
2113
- match len(df.columns):
2114
- case 0:
2115
- raise ImpossibleCaseError(case=[f"{df.columns=}"]) # pragma: no cover
2116
- case 1:
2117
- return df[one(df.columns)]
2118
- case _:
2119
- return df
2150
+ try:
2151
+ return one_column(df)
2152
+ except OneColumnNonUniqueError:
2153
+ return df
2120
2154
 
2121
2155
 
2122
2156
  @dataclass(kw_only=True, slots=True)
@@ -2519,6 +2553,9 @@ __all__ = [
2519
2553
  "InsertBeforeError",
2520
2554
  "InsertBetweenError",
2521
2555
  "IsNearEventError",
2556
+ "OneColumnEmptyError",
2557
+ "OneColumnError",
2558
+ "OneColumnNonUniqueError",
2522
2559
  "SetFirstRowAsColumnsError",
2523
2560
  "TimePeriodDType",
2524
2561
  "acf",
@@ -2533,7 +2570,6 @@ __all__ = [
2533
2570
  "boolean_value_counts",
2534
2571
  "check_polars_dataframe",
2535
2572
  "choice",
2536
- "collect_series",
2537
2573
  "columns_to_dict",
2538
2574
  "concat_series",
2539
2575
  "convert_time_zone",
@@ -2545,6 +2581,7 @@ __all__ = [
2545
2581
  "ensure_data_type",
2546
2582
  "ensure_expr_or_series",
2547
2583
  "ensure_expr_or_series_many",
2584
+ "expr_to_series",
2548
2585
  "finite_ewm_mean",
2549
2586
  "get_data_type_or_series_time_zone",
2550
2587
  "get_expr_name",
@@ -2565,6 +2602,7 @@ __all__ = [
2565
2602
  "nan_sum_cols",
2566
2603
  "normal",
2567
2604
  "offset_datetime",
2605
+ "one_column",
2568
2606
  "order_of_magnitude",
2569
2607
  "period_range",
2570
2608
  "read_dataframe",
@@ -91,9 +91,7 @@ class PolarsRegressionFixture:
91
91
  def check(self, obj: Series | DataFrame, /, *, suffix: str | None = None) -> None:
92
92
  """Check the Series/DataFrame summary against the baseline."""
93
93
  from polars import DataFrame, Series, col
94
- from polars.exceptions import (
95
- InvalidOperationError, # pyright: ignore[reportAttributeAccessIssue]
96
- )
94
+ from polars.exceptions import InvalidOperationError
97
95
 
98
96
  data: StrMapping = {
99
97
  "describe": obj.describe(percentiles=[i / 10 for i in range(1, 10)]).rows(