dycw-utilities 0.158.2__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.158.2 → dycw_utilities-0.159.1}/PKG-INFO +2 -2
  2. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/pyproject.toml +5 -5
  3. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_polars.py +132 -220
  4. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/__init__.py +1 -1
  5. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/polars.py +130 -179
  6. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/pytest_regressions.py +1 -3
  7. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/.gitignore +0 -0
  8. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/LICENSE +0 -0
  9. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/README.md +0 -0
  10. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/__init__.py +0 -0
  11. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/conftest.py +0 -0
  12. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/modules/__init__.py +0 -0
  13. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/modules/package_missing/__init__.py +0 -0
  14. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/modules/package_missing/module.py +0 -0
  15. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/modules/package_with/__init__.py +0 -0
  16. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/modules/package_with/outer_1.py +0 -0
  17. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/modules/package_with/outer_2.py +0 -0
  18. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
  19. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
  20. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
  21. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
  22. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/modules/package_without/__init__.py +0 -0
  23. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/modules/package_without/module_1.py +0 -0
  24. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/modules/package_without/module_2.py +0 -0
  25. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/modules/standalone.py +0 -0
  26. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/modules/with_imports.py +0 -0
  27. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
  28. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
  29. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
  30. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
  31. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
  32. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
  33. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
  34. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
  35. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_altair.py +0 -0
  36. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_asyncio.py +0 -0
  37. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_atomicwrites.py +0 -0
  38. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_atools.py +0 -0
  39. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_cachetools.py +0 -0
  40. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_click.py +0 -0
  41. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_concurrent.py +0 -0
  42. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_contextlib.py +0 -0
  43. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_contextvars.py +0 -0
  44. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_cryptography.py +0 -0
  45. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_cvxpy.py +0 -0
  46. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_dataclasses.py +0 -0
  47. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_enum.py +0 -0
  48. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_errors.py +0 -0
  49. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_eventkit.py +0 -0
  50. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_fastapi.py +0 -0
  51. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_fpdf2.py +0 -0
  52. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_functions.py +0 -0
  53. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_functools.py +0 -0
  54. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_getpass.py +0 -0
  55. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_gzip.py +0 -0
  56. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_hashlib.py +0 -0
  57. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_http.py +0 -0
  58. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_hypothesis.py +0 -0
  59. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_importlib.py +0 -0
  60. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_inflect.py +0 -0
  61. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_ipython.py +0 -0
  62. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_iterables.py +0 -0
  63. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_json.py +0 -0
  64. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_jupyter.py +0 -0
  65. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_libcst.py +0 -0
  66. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_lightweight_charts.py +0 -0
  67. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_logging.py +0 -0
  68. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_math.py +0 -0
  69. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_memory_profiler.py +0 -0
  70. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_modules.py +0 -0
  71. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_more_itertools.py +0 -0
  72. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_numpy.py +0 -0
  73. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_objects/__init__.py +0 -0
  74. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_objects/objects.py +0 -0
  75. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_operator.py +0 -0
  76. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_optuna.py +0 -0
  77. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_orjson.py +0 -0
  78. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_os.py +0 -0
  79. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_parse.py +0 -0
  80. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_pathlib.py +0 -0
  81. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_pickle.py +0 -0
  82. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_platform.py +0 -0
  83. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_polars_ols.py +0 -0
  84. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_postgres.py +0 -0
  85. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_pottery.py +0 -0
  86. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_pqdm.py +0 -0
  87. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_psutil.py +0 -0
  88. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_pyinstrument.py +0 -0
  89. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_pytest.py +0 -0
  90. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_pytest_randomly.py +0 -0
  91. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_pytest_regressions.py +0 -0
  92. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_random.py +0 -0
  93. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_re.py +0 -0
  94. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_redis.py +0 -0
  95. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_reprlib.py +0 -0
  96. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_scipy.py +0 -0
  97. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_sentinel.py +0 -0
  98. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_shelve.py +0 -0
  99. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_slack_sdk.py +0 -0
  100. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_socket.py +0 -0
  101. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_sqlalchemy.py +0 -0
  102. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_sqlalchemy_polars.py +0 -0
  103. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_statsmodels.py +0 -0
  104. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_string.py +0 -0
  105. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_tempfile.py +0 -0
  106. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_text.py +0 -0
  107. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_threading.py +0 -0
  108. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_timer.py +0 -0
  109. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_traceback.py +0 -0
  110. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_typed_settings.py +0 -0
  111. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_types.py +0 -0
  112. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_typing.py +0 -0
  113. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_typing_funcs/__init__.py +0 -0
  114. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_typing_funcs/no_future.py +0 -0
  115. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_typing_funcs/with_future.py +0 -0
  116. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_tzdata.py +0 -0
  117. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_tzlocal.py +0 -0
  118. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_uuid.py +0 -0
  119. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_version.py +0 -0
  120. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_warnings.py +0 -0
  121. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_whenever.py +0 -0
  122. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_zipfile.py +0 -0
  123. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/tests/test_zoneinfo.py +0 -0
  124. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/altair.py +0 -0
  125. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/asyncio.py +0 -0
  126. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/atomicwrites.py +0 -0
  127. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/atools.py +0 -0
  128. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/cachetools.py +0 -0
  129. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/click.py +0 -0
  130. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/concurrent.py +0 -0
  131. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/contextlib.py +0 -0
  132. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/contextvars.py +0 -0
  133. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/cryptography.py +0 -0
  134. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/cvxpy.py +0 -0
  135. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/dataclasses.py +0 -0
  136. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/enum.py +0 -0
  137. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/errors.py +0 -0
  138. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/eventkit.py +0 -0
  139. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/fastapi.py +0 -0
  140. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/fpdf2.py +0 -0
  141. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/functions.py +0 -0
  142. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/functools.py +0 -0
  143. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/getpass.py +0 -0
  144. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/gzip.py +0 -0
  145. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/hashlib.py +0 -0
  146. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/http.py +0 -0
  147. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/hypothesis.py +0 -0
  148. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/importlib.py +0 -0
  149. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/inflect.py +0 -0
  150. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/ipython.py +0 -0
  151. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/iterables.py +0 -0
  152. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/json.py +0 -0
  153. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/jupyter.py +0 -0
  154. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/libcst.py +0 -0
  155. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/lightweight_charts.py +0 -0
  156. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/logging.py +0 -0
  157. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/math.py +0 -0
  158. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/memory_profiler.py +0 -0
  159. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/modules.py +0 -0
  160. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/more_itertools.py +0 -0
  161. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/numpy.py +0 -0
  162. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/operator.py +0 -0
  163. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/optuna.py +0 -0
  164. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/orjson.py +0 -0
  165. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/os.py +0 -0
  166. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/parse.py +0 -0
  167. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/pathlib.py +0 -0
  168. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/pickle.py +0 -0
  169. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/platform.py +0 -0
  170. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/polars_ols.py +0 -0
  171. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/postgres.py +0 -0
  172. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/pottery.py +0 -0
  173. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/pqdm.py +0 -0
  174. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/psutil.py +0 -0
  175. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/py.typed +0 -0
  176. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/pyinstrument.py +0 -0
  177. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/pytest.py +0 -0
  178. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/pytest_plugins/__init__.py +0 -0
  179. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/pytest_plugins/pytest_randomly.py +0 -0
  180. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/pytest_plugins/pytest_regressions.py +0 -0
  181. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/random.py +0 -0
  182. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/re.py +0 -0
  183. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/redis.py +0 -0
  184. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/reprlib.py +0 -0
  185. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/scipy.py +0 -0
  186. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/sentinel.py +0 -0
  187. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/shelve.py +0 -0
  188. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/slack_sdk.py +0 -0
  189. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/socket.py +0 -0
  190. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/sqlalchemy.py +0 -0
  191. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/sqlalchemy_polars.py +0 -0
  192. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/statsmodels.py +0 -0
  193. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/string.py +0 -0
  194. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/tempfile.py +0 -0
  195. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/text.py +0 -0
  196. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/threading.py +0 -0
  197. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/timer.py +0 -0
  198. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/traceback.py +0 -0
  199. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/typed_settings.py +0 -0
  200. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/types.py +0 -0
  201. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/typing.py +0 -0
  202. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/tzdata.py +0 -0
  203. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/tzlocal.py +0 -0
  204. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/uuid.py +0 -0
  205. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/version.py +0 -0
  206. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/warnings.py +0 -0
  207. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/whenever.py +0 -0
  208. {dycw_utilities-0.158.2 → dycw_utilities-0.159.1}/src/utilities/zipfile.py +0 -0
  209. {dycw_utilities-0.158.2 → 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.158.2
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
@@ -12,7 +12,7 @@ Provides-Extra: logging
12
12
  Requires-Dist: coloredlogs<15.1,>=15.0.1; extra == 'logging'
13
13
  Provides-Extra: test
14
14
  Requires-Dist: dycw-pytest-only<2.2,>=2.1.1; extra == 'test'
15
- Requires-Dist: hypothesis<6.138,>=6.137.1; extra == 'test'
15
+ Requires-Dist: hypothesis<6.139,>=6.138.0; extra == 'test'
16
16
  Requires-Dist: pytest-asyncio<1.2,>=1.1.0; extra == 'test'
17
17
  Requires-Dist: pytest-cov<6.3,>=6.2.1; extra == 'test'
18
18
  Requires-Dist: pytest-instafail<0.6,>=0.5.0; extra == 'test'
@@ -68,7 +68,7 @@ http-test = [
68
68
  "orjson",
69
69
  ]
70
70
  hypothesis = [
71
- "hypothesis >=6.137.1, <6.138",
71
+ "hypothesis >=6.138.0, <6.139",
72
72
  ]
73
73
  hypothesis-test = [
74
74
  "libcst",
@@ -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.158.2"
230
+ version = "0.159.1"
231
231
 
232
232
  [project.entry-points.pytest11]
233
233
  pytest-randomly = "utilities.pytest_plugins.pytest_randomly"
@@ -239,7 +239,7 @@ logging = [
239
239
  ]
240
240
  test = [
241
241
  "dycw-pytest-only >=2.1.1, <2.2",
242
- "hypothesis >=6.137.1, <6.138",
242
+ "hypothesis >=6.138.0, <6.139",
243
243
  "pytest >=8.4.1, <8.5",
244
244
  "pytest-asyncio >=1.1.0, <1.2",
245
245
  "pytest-cov >=6.2.1, <6.3",
@@ -259,7 +259,7 @@ test = [
259
259
  # bump-my-version
260
260
  [tool.bumpversion]
261
261
  allow_dirty = true
262
- current_version = "0.158.2"
262
+ current_version = "0.159.1"
263
263
 
264
264
  [[tool.bumpversion.files]]
265
265
  filename = "src/utilities/__init__.py"
@@ -8,7 +8,7 @@ from enum import auto
8
8
  from itertools import chain, repeat
9
9
  from math import isfinite, nan
10
10
  from random import Random
11
- from typing import TYPE_CHECKING, Any, ClassVar, Literal, assert_never, cast
11
+ from typing import TYPE_CHECKING, Any, ClassVar, Literal, assert_never
12
12
  from uuid import UUID, uuid4
13
13
 
14
14
  import hypothesis.strategies
@@ -90,13 +90,12 @@ from utilities.polars import (
90
90
  DatetimeUSCentral,
91
91
  DatetimeUSEastern,
92
92
  DatetimeUTC,
93
- DropNullStructSeriesError,
94
93
  ExprOrSeries,
95
94
  FiniteEWMMeanError,
96
95
  InsertAfterError,
97
96
  InsertBeforeError,
98
- IsNotNullStructSeriesError,
99
- IsNullStructSeriesError,
97
+ OneColumnEmptyError,
98
+ OneColumnNonUniqueError,
100
99
  SetFirstRowAsColumnsError,
101
100
  TimePeriodDType,
102
101
  _check_polars_dataframe_predicates,
@@ -137,8 +136,6 @@ from utilities.polars import (
137
136
  _reconstruct_schema,
138
137
  _ReifyExprsEmptyError,
139
138
  _ReifyExprsSeriesNonUniqueError,
140
- _StructFromDataClassNotADataclassError,
141
- _StructFromDataClassTypeError,
142
139
  ac_halflife,
143
140
  acf,
144
141
  adjust_frequencies,
@@ -152,7 +149,6 @@ from utilities.polars import (
152
149
  boolean_value_counts,
153
150
  check_polars_dataframe,
154
151
  choice,
155
- collect_series,
156
152
  columns_to_dict,
157
153
  concat_series,
158
154
  convert_time_zone,
@@ -163,10 +159,10 @@ from utilities.polars import (
163
159
  decreasing_horizontal,
164
160
  deserialize_dataframe,
165
161
  deserialize_series,
166
- drop_null_struct_series,
167
162
  ensure_data_type,
168
163
  ensure_expr_or_series,
169
164
  ensure_expr_or_series_many,
165
+ expr_to_series,
170
166
  finite_ewm_mean,
171
167
  get_data_type_or_series_time_zone,
172
168
  get_expr_name,
@@ -176,9 +172,9 @@ from utilities.polars import (
176
172
  insert_after,
177
173
  insert_before,
178
174
  insert_between,
175
+ is_false,
179
176
  is_near_event,
180
- is_not_null_struct_series,
181
- is_null_struct_series,
177
+ is_true,
182
178
  join,
183
179
  join_into_periods,
184
180
  map_over_columns,
@@ -186,6 +182,7 @@ from utilities.polars import (
186
182
  nan_sum_cols,
187
183
  normal,
188
184
  offset_datetime,
185
+ one_column,
189
186
  order_of_magnitude,
190
187
  period_range,
191
188
  read_dataframe,
@@ -197,7 +194,10 @@ from utilities.polars import (
197
194
  serialize_series,
198
195
  set_first_row_as_columns,
199
196
  struct_dtype,
200
- struct_from_dataclass,
197
+ to_false,
198
+ to_not_false,
199
+ to_not_true,
200
+ to_true,
201
201
  touch,
202
202
  try_reify_expr,
203
203
  uniform,
@@ -830,14 +830,6 @@ class TestChoice:
830
830
  assert series.is_in(list(elements)).all()
831
831
 
832
832
 
833
- class TestCollectSeries:
834
- def test_main(self) -> None:
835
- expr = int_range(end=10)
836
- series = collect_series(expr)
837
- expected = int_range(end=10, eager=True)
838
- assert_series_equal(series, expected)
839
-
840
-
841
833
  class TestColumnsToDict:
842
834
  def test_main(self) -> None:
843
835
  df = DataFrame(
@@ -1449,29 +1441,6 @@ class TestDatetimeDTypes:
1449
1441
  assert name == expected
1450
1442
 
1451
1443
 
1452
- class TestDropNullStructSeries:
1453
- def test_main(self) -> None:
1454
- series = Series(
1455
- values=[
1456
- {"a": None, "b": None},
1457
- {"a": True, "b": None},
1458
- {"a": None, "b": False},
1459
- {"a": True, "b": False},
1460
- ],
1461
- dtype=Struct({"a": Boolean, "b": Boolean}),
1462
- )
1463
- result = drop_null_struct_series(series)
1464
- expected = series[1:]
1465
- assert_series_equal(result, expected)
1466
-
1467
- def test_error(self) -> None:
1468
- series = Series(name="series", values=[1, 2, 3, None], dtype=Int64)
1469
- with raises(
1470
- DropNullStructSeriesError, match="Series must have Struct-dtype; got Int64"
1471
- ):
1472
- _ = drop_null_struct_series(series)
1473
-
1474
-
1475
1444
  class TestEnsureDataType:
1476
1445
  @given(dtype=sampled_from([Boolean, Boolean()]))
1477
1446
  def test_main(self, *, dtype: MaybeType[Boolean]) -> None:
@@ -1496,6 +1465,14 @@ class TestEnsureExprOrSeriesMany:
1496
1465
  assert isinstance(r, Expr | Series)
1497
1466
 
1498
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
+
1499
1476
  class TestFiniteEWMMean:
1500
1477
  alpha_0_75_values: ClassVar[list[float]] = [
1501
1478
  -8.269850726503885,
@@ -1930,68 +1907,20 @@ class TestIsNearEvent:
1930
1907
  _ = is_near_event(after=after)
1931
1908
 
1932
1909
 
1933
- class TestIsNullAndIsNotNullStructSeries:
1934
- @given(
1935
- case=sampled_from([
1936
- (is_null_struct_series, [True, False, False, False]),
1937
- (is_not_null_struct_series, [False, True, True, True]),
1938
- ])
1910
+ class TestIsTrueAndFalse:
1911
+ series: ClassVar[Series] = Series(
1912
+ name="x", values=[True, False, None], dtype=Boolean
1939
1913
  )
1940
- def test_main(self, *, case: tuple[Callable[[Series], Series], list[bool]]) -> None:
1941
- func, exp_values = case
1942
- series = Series(
1943
- values=[
1944
- {"a": None, "b": None},
1945
- {"a": True, "b": None},
1946
- {"a": None, "b": False},
1947
- {"a": True, "b": False},
1948
- ],
1949
- dtype=Struct({"a": Boolean, "b": Boolean}),
1950
- )
1951
- result = func(series)
1952
- expected = Series(values=exp_values, dtype=Boolean)
1953
- assert_series_equal(result, expected)
1954
1914
 
1955
- @given(
1956
- case=sampled_from([
1957
- (is_null_struct_series, [False, False, False, True]),
1958
- (is_not_null_struct_series, [True, True, True, False]),
1959
- ])
1960
- )
1961
- def test_nested(
1962
- self, *, case: tuple[Callable[[Series], Series], list[bool]]
1963
- ) -> None:
1964
- func, exp_values = case
1965
- series = Series(
1966
- values=[
1967
- {"a": 1, "b": 2, "inner": {"lower": 3, "upper": 4}},
1968
- {"a": 1, "b": 2, "inner": None},
1969
- {"a": None, "b": None, "inner": {"lower": 3, "upper": 4}},
1970
- {"a": None, "b": None, "inner": None},
1971
- ],
1972
- dtype=Struct({
1973
- "a": Int64,
1974
- "b": Int64,
1975
- "inner": Struct({"lower": Int64, "upper": Int64}),
1976
- }),
1977
- )
1978
- result = func(series)
1979
- expected = Series(values=exp_values, dtype=Boolean)
1915
+ def test_true(self) -> None:
1916
+ result = is_true(self.series)
1917
+ expected = Series(name="x", values=[True, False, False], dtype=Boolean)
1980
1918
  assert_series_equal(result, expected)
1981
1919
 
1982
- @given(
1983
- case=sampled_from([
1984
- (is_null_struct_series, IsNullStructSeriesError),
1985
- (is_not_null_struct_series, IsNotNullStructSeriesError),
1986
- ])
1987
- )
1988
- def test_error(
1989
- self, *, case: tuple[Callable[[Series], Series], type[Exception]]
1990
- ) -> None:
1991
- func, error = case
1992
- series = Series(name="series", values=[1, 2, 3, None], dtype=Int64)
1993
- with raises(error, match="Series must have Struct-dtype; got Int64"):
1994
- _ = func(series)
1920
+ def test_false(self) -> None:
1921
+ result = is_false(self.series)
1922
+ expected = Series(name="x", values=[False, True, False], dtype=Boolean)
1923
+ assert_series_equal(result, expected)
1995
1924
 
1996
1925
 
1997
1926
  class TestJoin:
@@ -2313,6 +2242,27 @@ class TestOffsetDateTime:
2313
2242
  assert result == expected
2314
2243
 
2315
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
+
2316
2266
  class TestOrderOfMagnitude:
2317
2267
  @given(
2318
2268
  sign=sampled_from([1, -1]),
@@ -2574,130 +2524,92 @@ class TestStructDType:
2574
2524
  assert result == expected
2575
2525
 
2576
2526
 
2577
- class TestStructFromDataClass:
2578
- def test_simple(self) -> None:
2579
- @dataclass(kw_only=True, slots=True)
2580
- class Example:
2581
- bool_: bool
2582
- bool_maybe: bool | None = None
2583
- date: whenever.Date
2584
- date_maybe: whenever.Date | None = None
2585
- float_: float
2586
- float_maybe: float | None = None
2587
- int_: int
2588
- int_maybe: int | None = None
2589
- str_: str
2590
- str_maybe: str | None = None
2591
-
2592
- result = struct_from_dataclass(Example, globalns=globals())
2593
- expected = Struct({
2594
- "bool_": Boolean,
2595
- "bool_maybe": Boolean,
2596
- "date": pl.Date,
2597
- "date_maybe": pl.Date,
2598
- "float_": Float64,
2599
- "float_maybe": Float64,
2600
- "int_": Int64,
2601
- "int_maybe": Int64,
2602
- "str_": String,
2603
- "str_maybe": String,
2604
- })
2605
- assert result == expected
2527
+ class TestToTrueAndFalse:
2528
+ series_tt: ClassVar[Series] = Series(name="x", values=[True, True], dtype=Boolean)
2529
+ series_tf: ClassVar[Series] = Series(name="x", values=[True, False], dtype=Boolean)
2530
+ series_t0: ClassVar[Series] = Series(name="x", values=[True, None], dtype=Boolean)
2531
+ series_ft: ClassVar[Series] = Series(name="x", values=[False, True], dtype=Boolean)
2532
+ series_ff: ClassVar[Series] = Series(name="x", values=[False, False], dtype=Boolean)
2533
+ series_f0: ClassVar[Series] = Series(name="x", values=[False, None], dtype=Boolean)
2534
+ series_0t: ClassVar[Series] = Series(name="x", values=[None, True], dtype=Boolean)
2535
+ series_0f: ClassVar[Series] = Series(name="x", values=[None, False], dtype=Boolean)
2536
+ series_00: ClassVar[Series] = Series(name="x", values=[None, None], dtype=Boolean)
2606
2537
 
2607
- def test_enum(self) -> None:
2608
- class Truth(enum.Enum):
2609
- true = auto()
2610
- false = auto()
2611
-
2612
- @dataclass(kw_only=True, slots=True)
2613
- class Example:
2614
- field: Truth
2615
-
2616
- result = struct_from_dataclass(Example, localns=locals())
2617
- expected = Struct({"field": String})
2618
- assert result == expected
2619
-
2620
- def test_literal(self) -> None:
2621
- LowOrHigh = Literal["low", "high"] # noqa: N806
2622
-
2623
- @dataclass(kw_only=True, slots=True)
2624
- class Example:
2625
- field: LowOrHigh # pyright: ignore[reportInvalidTypeForm]
2626
-
2627
- result = struct_from_dataclass(Example, localns=locals())
2628
- expected = Struct({"field": String})
2629
- assert result == expected
2630
-
2631
- def test_containers(self) -> None:
2632
- @dataclass(kw_only=True, slots=True)
2633
- class Example:
2634
- frozenset_: frozenset[int]
2635
- list_: list[int]
2636
- set_: set[int]
2637
-
2638
- result = struct_from_dataclass(Example, time_zone=UTC)
2639
- expected = Struct({
2640
- "frozenset_": List(Int64),
2641
- "list_": List(Int64),
2642
- "set_": List(Int64),
2643
- })
2644
- assert result == expected
2645
-
2646
- def test_list_of_struct(self) -> None:
2647
- @dataclass(kw_only=True, slots=True)
2648
- class Inner:
2649
- field: int
2650
-
2651
- @dataclass(kw_only=True, slots=True)
2652
- class Outer:
2653
- inner: list[Inner]
2654
-
2655
- result = struct_from_dataclass(Outer, localns=locals(), time_zone=UTC)
2656
- expected = Struct({"inner": List(Struct({"field": Int64}))})
2657
- assert result == expected
2658
-
2659
- def test_struct(self) -> None:
2660
- @dataclass(kw_only=True, slots=True)
2661
- class Inner:
2662
- field: int
2663
-
2664
- @dataclass(kw_only=True, slots=True)
2665
- class Outer:
2666
- inner: Inner
2667
-
2668
- result = struct_from_dataclass(Outer, localns=locals(), time_zone=UTC)
2669
- expected = Struct({"inner": Struct({"field": Int64})})
2670
- assert result == expected
2671
-
2672
- def test_struct_of_list(self) -> None:
2673
- @dataclass(kw_only=True, slots=True)
2674
- class Inner:
2675
- field: list[int]
2676
-
2677
- @dataclass(kw_only=True, slots=True)
2678
- class Outer:
2679
- inner: Inner
2680
-
2681
- result = struct_from_dataclass(Outer, localns=locals(), time_zone=UTC)
2682
- expected = Struct({"inner": Struct({"field": List(Int64)})})
2683
- assert result == expected
2538
+ @mark.parametrize(
2539
+ ("series", "exp_values"),
2540
+ [
2541
+ param(series_tt, [False, False]),
2542
+ param(series_tf, [False, False]),
2543
+ param(series_t0, [False, False]),
2544
+ param(series_ft, [False, True]),
2545
+ param(series_ff, [False, False]),
2546
+ param(series_f0, [False, False]),
2547
+ param(series_0t, [False, True]),
2548
+ param(series_0f, [False, False]),
2549
+ param(series_00, [False, False]),
2550
+ ],
2551
+ )
2552
+ def test_to_true(self, *, series: Series, exp_values: list[bool]) -> None:
2553
+ result = to_true(series)
2554
+ exp_series = Series(name="x", values=exp_values, dtype=Boolean)
2555
+ assert_series_equal(result, exp_series)
2684
2556
 
2685
- def test_not_a_dataclass_error(self) -> None:
2686
- with raises(
2687
- _StructFromDataClassNotADataclassError,
2688
- match="Object must be a dataclass; got None",
2689
- ):
2690
- _ = struct_from_dataclass(cast("Any", None))
2557
+ @mark.parametrize(
2558
+ ("series", "exp_values"),
2559
+ [
2560
+ param(series_tt, [False, False]),
2561
+ param(series_tf, [False, True]),
2562
+ param(series_t0, [False, True]),
2563
+ param(series_ft, [False, False]),
2564
+ param(series_ff, [False, False]),
2565
+ param(series_f0, [False, False]),
2566
+ param(series_0t, [False, False]),
2567
+ param(series_0f, [False, False]),
2568
+ param(series_00, [False, False]),
2569
+ ],
2570
+ )
2571
+ def test_to_not_true(self, *, series: Series, exp_values: list[bool]) -> None:
2572
+ result = to_not_true(series)
2573
+ exp_series = Series(name="x", values=exp_values, dtype=Boolean)
2574
+ assert_series_equal(result, exp_series)
2691
2575
 
2692
- def test_missing_type_error(self) -> None:
2693
- @dataclass(kw_only=True, slots=True)
2694
- class Example:
2695
- field: None
2576
+ @mark.parametrize(
2577
+ ("series", "exp_values"),
2578
+ [
2579
+ param(series_tt, [False, False]),
2580
+ param(series_tf, [False, True]),
2581
+ param(series_t0, [False, False]),
2582
+ param(series_ft, [False, False]),
2583
+ param(series_ff, [False, False]),
2584
+ param(series_f0, [False, False]),
2585
+ param(series_0t, [False, False]),
2586
+ param(series_0f, [False, True]),
2587
+ param(series_00, [False, False]),
2588
+ ],
2589
+ )
2590
+ def test_to_false(self, *, series: Series, exp_values: list[bool]) -> None:
2591
+ result = to_false(series)
2592
+ exp_series = Series(name="x", values=exp_values, dtype=Boolean)
2593
+ assert_series_equal(result, exp_series)
2696
2594
 
2697
- with raises(
2698
- _StructFromDataClassTypeError, match="Unsupported type: <class 'NoneType'>"
2699
- ):
2700
- _ = struct_from_dataclass(Example)
2595
+ @mark.parametrize(
2596
+ ("series", "exp_values"),
2597
+ [
2598
+ param(series_tt, [False, False]),
2599
+ param(series_tf, [False, False]),
2600
+ param(series_t0, [False, False]),
2601
+ param(series_ft, [False, True]),
2602
+ param(series_ff, [False, False]),
2603
+ param(series_f0, [False, True]),
2604
+ param(series_0t, [False, False]),
2605
+ param(series_0f, [False, False]),
2606
+ param(series_00, [False, False]),
2607
+ ],
2608
+ )
2609
+ def test_to_not_false(self, *, series: Series, exp_values: list[bool]) -> None:
2610
+ result = to_not_false(series)
2611
+ exp_series = Series(name="x", values=exp_values, dtype=Boolean)
2612
+ assert_series_equal(result, exp_series)
2701
2613
 
2702
2614
 
2703
2615
  class TestTryReifyExpr:
@@ -1,3 +1,3 @@
1
1
  from __future__ import annotations
2
2
 
3
- __version__ = "0.158.2"
3
+ __version__ = "0.159.1"