dycw-utilities 0.136.4__tar.gz → 0.136.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 (216) hide show
  1. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/PKG-INFO +1 -1
  2. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/pyproject.toml +3 -3
  3. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_hypothesis.py +43 -1
  4. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_libcst.py +17 -17
  5. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/__init__.py +1 -1
  6. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/hypothesis.py +80 -3
  7. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/libcst.py +11 -11
  8. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/.gitignore +0 -0
  9. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/LICENSE +0 -0
  10. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/README.md +0 -0
  11. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/__init__.py +0 -0
  12. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/conftest.py +0 -0
  13. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/modules/__init__.py +0 -0
  14. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/modules/package_missing/__init__.py +0 -0
  15. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/modules/package_missing/module.py +0 -0
  16. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/modules/package_with/__init__.py +0 -0
  17. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/modules/package_with/outer_1.py +0 -0
  18. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/modules/package_with/outer_2.py +0 -0
  19. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
  20. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
  21. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
  22. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
  23. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/modules/package_without/__init__.py +0 -0
  24. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/modules/package_without/module_1.py +0 -0
  25. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/modules/package_without/module_2.py +0 -0
  26. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/modules/standalone.py +0 -0
  27. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/modules/with_imports.py +0 -0
  28. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
  29. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
  30. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
  31. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
  32. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
  33. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
  34. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
  35. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
  36. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_aiolimiter.py +0 -0
  37. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_altair.py +0 -0
  38. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_asyncio.py +0 -0
  39. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_asyncio_classes/__init__.py +0 -0
  40. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_asyncio_classes/loopers.py +0 -0
  41. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_asyncio_classes/redis.py +0 -0
  42. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_atomicwrites.py +0 -0
  43. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_atools.py +0 -0
  44. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_cachetools.py +0 -0
  45. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_click.py +0 -0
  46. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_concurrent.py +0 -0
  47. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_contextlib.py +0 -0
  48. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_contextvars.py +0 -0
  49. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_cryptography.py +0 -0
  50. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_cvxpy.py +0 -0
  51. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_dataclasses.py +0 -0
  52. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_enum.py +0 -0
  53. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_errors.py +0 -0
  54. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_eventkit.py +0 -0
  55. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_fastapi.py +0 -0
  56. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_fpdf2.py +0 -0
  57. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_functions.py +0 -0
  58. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_functools.py +0 -0
  59. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_getpass.py +0 -0
  60. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_git.py +0 -0
  61. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_hashlib.py +0 -0
  62. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_http.py +0 -0
  63. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_importlib.py +0 -0
  64. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_inflect.py +0 -0
  65. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_ipython.py +0 -0
  66. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_iterables.py +0 -0
  67. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_jupyter.py +0 -0
  68. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_lightweight_charts.py +0 -0
  69. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_logging.py +0 -0
  70. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_luigi.py +0 -0
  71. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_math.py +0 -0
  72. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_memory_profiler.py +0 -0
  73. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_modules.py +0 -0
  74. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_more_itertools.py +0 -0
  75. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_numpy.py +0 -0
  76. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_objects/__init__.py +0 -0
  77. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_objects/objects.py +0 -0
  78. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_operator.py +0 -0
  79. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_optuna.py +0 -0
  80. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_orjson.py +0 -0
  81. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_os.py +0 -0
  82. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_parse.py +0 -0
  83. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_pathlib.py +0 -0
  84. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_period.py +0 -0
  85. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_pickle.py +0 -0
  86. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_platform.py +0 -0
  87. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_polars.py +0 -0
  88. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_polars_ols.py +0 -0
  89. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_pottery.py +0 -0
  90. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_pqdm.py +0 -0
  91. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_psutil.py +0 -0
  92. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_pydantic.py +0 -0
  93. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_pyinstrument.py +0 -0
  94. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_pytest.py +0 -0
  95. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_pytest_regressions.py +0 -0
  96. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_python_dotenv.py +0 -0
  97. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_random.py +0 -0
  98. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_re.py +0 -0
  99. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_redis.py +0 -0
  100. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_reprlib.py +0 -0
  101. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_scipy.py +0 -0
  102. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_sentinel.py +0 -0
  103. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_shelve.py +0 -0
  104. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_slack_sdk.py +0 -0
  105. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_socket.py +0 -0
  106. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_sqlalchemy.py +0 -0
  107. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_sqlalchemy_polars.py +0 -0
  108. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_statsmodels.py +0 -0
  109. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_streamlit.py +0 -0
  110. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_string.py +0 -0
  111. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_tempfile.py +0 -0
  112. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_text.py +0 -0
  113. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_threading.py +0 -0
  114. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_timer.py +0 -0
  115. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_traceback.py +0 -0
  116. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_typed_settings.py +0 -0
  117. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_types.py +0 -0
  118. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_typing.py +0 -0
  119. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_typing_funcs/__init__.py +0 -0
  120. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_typing_funcs/no_future.py +0 -0
  121. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_typing_funcs/with_future.py +0 -0
  122. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_tzdata.py +0 -0
  123. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_tzlocal.py +0 -0
  124. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_uuid.py +0 -0
  125. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_version.py +0 -0
  126. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_warnings.py +0 -0
  127. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_whenever.py +0 -0
  128. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_zipfile.py +0 -0
  129. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_zoneinfo.py +0 -0
  130. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/aiolimiter.py +0 -0
  131. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/altair.py +0 -0
  132. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/asyncio.py +0 -0
  133. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/atomicwrites.py +0 -0
  134. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/atools.py +0 -0
  135. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/cachetools.py +0 -0
  136. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/click.py +0 -0
  137. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/concurrent.py +0 -0
  138. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/contextlib.py +0 -0
  139. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/contextvars.py +0 -0
  140. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/cryptography.py +0 -0
  141. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/cvxpy.py +0 -0
  142. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/dataclasses.py +0 -0
  143. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/enum.py +0 -0
  144. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/errors.py +0 -0
  145. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/eventkit.py +0 -0
  146. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/fastapi.py +0 -0
  147. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/fpdf2.py +0 -0
  148. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/functions.py +0 -0
  149. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/functools.py +0 -0
  150. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/getpass.py +0 -0
  151. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/git.py +0 -0
  152. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/hashlib.py +0 -0
  153. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/http.py +0 -0
  154. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/importlib.py +0 -0
  155. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/inflect.py +0 -0
  156. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/ipython.py +0 -0
  157. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/iterables.py +0 -0
  158. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/jupyter.py +0 -0
  159. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/lightweight_charts.py +0 -0
  160. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/logging.py +0 -0
  161. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/luigi.py +0 -0
  162. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/math.py +0 -0
  163. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/memory_profiler.py +0 -0
  164. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/modules.py +0 -0
  165. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/more_itertools.py +0 -0
  166. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/numpy.py +0 -0
  167. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/operator.py +0 -0
  168. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/optuna.py +0 -0
  169. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/orjson.py +0 -0
  170. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/os.py +0 -0
  171. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/parse.py +0 -0
  172. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/pathlib.py +0 -0
  173. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/period.py +0 -0
  174. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/pickle.py +0 -0
  175. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/platform.py +0 -0
  176. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/polars.py +0 -0
  177. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/polars_ols.py +0 -0
  178. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/pottery.py +0 -0
  179. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/pqdm.py +0 -0
  180. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/psutil.py +0 -0
  181. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/py.typed +0 -0
  182. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/pydantic.py +0 -0
  183. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/pyinstrument.py +0 -0
  184. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/pytest.py +0 -0
  185. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/pytest_regressions.py +0 -0
  186. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/python_dotenv.py +0 -0
  187. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/random.py +0 -0
  188. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/re.py +0 -0
  189. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/redis.py +0 -0
  190. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/reprlib.py +0 -0
  191. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/scipy.py +0 -0
  192. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/sentinel.py +0 -0
  193. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/shelve.py +0 -0
  194. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/slack_sdk.py +0 -0
  195. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/socket.py +0 -0
  196. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/sqlalchemy.py +0 -0
  197. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/sqlalchemy_polars.py +0 -0
  198. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/statsmodels.py +0 -0
  199. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/streamlit.py +0 -0
  200. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/string.py +0 -0
  201. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/tempfile.py +0 -0
  202. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/text.py +0 -0
  203. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/threading.py +0 -0
  204. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/timer.py +0 -0
  205. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/traceback.py +0 -0
  206. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/typed_settings.py +0 -0
  207. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/types.py +0 -0
  208. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/typing.py +0 -0
  209. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/tzdata.py +0 -0
  210. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/tzlocal.py +0 -0
  211. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/uuid.py +0 -0
  212. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/version.py +0 -0
  213. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/warnings.py +0 -0
  214. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/whenever.py +0 -0
  215. {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/zipfile.py +0 -0
  216. {dycw_utilities-0.136.4 → dycw_utilities-0.136.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.136.4
3
+ Version: 0.136.5
4
4
  Author-email: Derek Wan <d.wan@icloud.com>
5
5
  License-File: LICENSE
6
6
  Requires-Python: >=3.12
@@ -41,7 +41,7 @@ fpdf2 = ["fpdf2 >= 2.8.3, < 2.9"]
41
41
  hashlib-test = ["orjson"]
42
42
  http-test = ["orjson"]
43
43
  hypothesis = ["hypothesis >= 6.135.2, < 6.136"]
44
- hypothesis-test = ["luigi", "pathvalidate", "numpy", "pytest-rerunfailures"]
44
+ hypothesis-test = ["libcst", "luigi", "pathvalidate", "numpy", "pytest-rerunfailures"]
45
45
  inflect = ["inflect >= 7.5.0, < 7.6"]
46
46
  jupyter-test = ["pandas", "polars"]
47
47
  libcst = ["libcst >= 1.8.0, < 1.9"]
@@ -105,7 +105,7 @@ dependencies = [
105
105
  name = "dycw-utilities"
106
106
  readme = "README.md"
107
107
  requires-python = ">= 3.12"
108
- version = "0.136.4"
108
+ version = "0.136.5"
109
109
 
110
110
  [project.optional-dependencies]
111
111
  logging = [
@@ -133,7 +133,7 @@ test = [
133
133
  # bump-my-version
134
134
  [tool.bumpversion]
135
135
  allow_dirty = true
136
- current_version = "0.136.4"
136
+ current_version = "0.136.5"
137
137
 
138
138
  [[tool.bumpversion.files]]
139
139
  filename = "src/utilities/__init__.py"
@@ -21,6 +21,7 @@ from hypothesis.strategies import (
21
21
  sets,
22
22
  timezones,
23
23
  )
24
+ from libcst import Import, ImportFrom
24
25
  from luigi import Task
25
26
  from numpy import inf, int64, isfinite, isinf, isnan, ravel, rint
26
27
  from pathvalidate import validate_filepath
@@ -55,6 +56,8 @@ from utilities.hypothesis import (
55
56
  freqs,
56
57
  git_repos,
57
58
  hashables,
59
+ import_froms,
60
+ imports,
58
61
  int32s,
59
62
  int64s,
60
63
  int_arrays,
@@ -88,6 +91,8 @@ from utilities.hypothesis import (
88
91
  versions,
89
92
  zoned_datetimes,
90
93
  )
94
+ from utilities.iterables import one
95
+ from utilities.libcst import parse_import
91
96
  from utilities.math import (
92
97
  MAX_FLOAT32,
93
98
  MAX_FLOAT64,
@@ -514,6 +519,36 @@ class TestHashables:
514
519
  _ = hash(x)
515
520
 
516
521
 
522
+ class TestImports:
523
+ @given(data=data())
524
+ def test_main(self, *, data: DataObject) -> None:
525
+ min_depth = data.draw(integers(0, 10) | none())
526
+ max_depth = data.draw(integers(0, 10) | none())
527
+ with assume_does_not_raise(InvalidArgument):
528
+ imp = data.draw(imports(min_depth=min_depth, max_depth=max_depth))
529
+ assert isinstance(imp, Import)
530
+ parsed = one(parse_import(imp))
531
+ if min_depth is not None:
532
+ assert len(parsed.module.split(".")) >= min_depth
533
+ if max_depth is not None:
534
+ assert len(parsed.module.split(".")) <= max_depth
535
+
536
+
537
+ class TestImportFroms:
538
+ @given(data=data())
539
+ def test_main(self, *, data: DataObject) -> None:
540
+ min_depth = data.draw(integers(0, 10) | none())
541
+ max_depth = data.draw(integers(0, 10) | none())
542
+ with assume_does_not_raise(InvalidArgument):
543
+ imp = data.draw(import_froms(min_depth=min_depth, max_depth=max_depth))
544
+ assert isinstance(imp, ImportFrom)
545
+ parsed = one(parse_import(imp))
546
+ if min_depth is not None:
547
+ assert len(parsed.module.split(".")) >= min_depth
548
+ if max_depth is not None:
549
+ assert len(parsed.module.split(".")) <= max_depth
550
+
551
+
517
552
  class TestIntArrays:
518
553
  @given(
519
554
  data=data(),
@@ -648,10 +683,17 @@ class TestPairs:
648
683
  class TestPaths:
649
684
  @given(data=data())
650
685
  def test_main(self, *, data: DataObject) -> None:
651
- path = data.draw(paths())
686
+ min_depth = data.draw(integers(0, 10) | none())
687
+ max_depth = data.draw(integers(0, 10) | none())
688
+ with assume_does_not_raise(InvalidArgument):
689
+ path = data.draw(paths(min_depth=min_depth, max_depth=max_depth))
652
690
  assert isinstance(path, Path)
653
691
  assert not path.is_absolute()
654
692
  validate_filepath(str(path))
693
+ if min_depth is not None:
694
+ assert len(path.parts) >= min_depth
695
+ if max_depth is not None:
696
+ assert len(path.parts) <= max_depth
655
697
 
656
698
 
657
699
  class TestPlainDateTimes:
@@ -25,8 +25,8 @@ from utilities.libcst import (
25
25
  _ParseImportAliasError,
26
26
  _ParseImportEmptyModuleError,
27
27
  generate_f_string,
28
- generate_from_import,
29
28
  generate_import,
29
+ generate_import_from,
30
30
  join_dotted_str,
31
31
  parse_import,
32
32
  render_module,
@@ -42,22 +42,6 @@ class TestGenerateFString:
42
42
  assert result == expected
43
43
 
44
44
 
45
- class TestGenerateFromImport:
46
- @given(
47
- case=sampled_from([
48
- ("foo", "bar", None, "from foo import bar"),
49
- ("foo", "bar", "bar2", "from foo import bar as bar2"),
50
- ("foo.bar", "baz", None, "from foo.bar import baz"),
51
- ("foo.bar", "baz", "baz2", "from foo.bar import baz as baz2"),
52
- ])
53
- )
54
- def test_main(self, *, case: tuple[str, str, str | None, str]) -> None:
55
- module, name, asname, expected = case
56
- imp = generate_from_import(module, name, asname=asname)
57
- result = Module([SimpleStatementLine([imp])]).code.strip("\n")
58
- assert result == expected
59
-
60
-
61
45
  class TestGenerateImport:
62
46
  @given(
63
47
  case=sampled_from([
@@ -74,6 +58,22 @@ class TestGenerateImport:
74
58
  assert result == expected
75
59
 
76
60
 
61
+ class TestGenerateImportFrom:
62
+ @given(
63
+ case=sampled_from([
64
+ ("foo", "bar", None, "from foo import bar"),
65
+ ("foo", "bar", "bar2", "from foo import bar as bar2"),
66
+ ("foo.bar", "baz", None, "from foo.bar import baz"),
67
+ ("foo.bar", "baz", "baz2", "from foo.bar import baz as baz2"),
68
+ ])
69
+ )
70
+ def test_main(self, *, case: tuple[str, str, str | None, str]) -> None:
71
+ module, name, asname, expected = case
72
+ imp = generate_import_from(module, name, asname=asname)
73
+ result = Module([SimpleStatementLine([imp])]).code.strip("\n")
74
+ assert result == expected
75
+
76
+
77
77
  class TestParseImport:
78
78
  def test_import_one_name(self) -> None:
79
79
  imp = Import(names=[ImportAlias(Name("foo"))])
@@ -1,3 +1,3 @@
1
1
  from __future__ import annotations
2
2
 
3
- __version__ = "0.136.4"
3
+ __version__ = "0.136.5"
@@ -106,6 +106,7 @@ if TYPE_CHECKING:
106
106
  from collections.abc import Collection, Hashable, Iterable, Iterator
107
107
 
108
108
  from hypothesis.database import ExampleDatabase
109
+ from libcst import Import, ImportFrom
109
110
  from numpy.random import RandomState
110
111
 
111
112
  from utilities.numpy import NDArrayB, NDArrayF, NDArrayI, NDArrayO
@@ -555,6 +556,59 @@ def hashables() -> SearchStrategy[Hashable]:
555
556
  ##
556
557
 
557
558
 
559
+ @composite
560
+ def import_froms(
561
+ draw: DrawFn,
562
+ /,
563
+ *,
564
+ min_depth: MaybeSearchStrategy[int | None] = None,
565
+ max_depth: MaybeSearchStrategy[int | None] = None,
566
+ ) -> ImportFrom:
567
+ """Strategy for generating import-froms."""
568
+ from utilities.libcst import generate_import_from
569
+
570
+ min_depth_, max_depth_ = [draw2(draw, d) for d in [min_depth, max_depth]]
571
+ path = draw(
572
+ paths(
573
+ min_depth=1 if min_depth_ is None else max(min_depth_, 1),
574
+ max_depth=max_depth_,
575
+ )
576
+ )
577
+ module = ".".join(path.parts)
578
+ name = draw(text_ascii(min_size=1))
579
+ asname = draw(text_ascii(min_size=1) | none())
580
+ return generate_import_from(module, name, asname=asname)
581
+
582
+
583
+ ##
584
+
585
+
586
+ @composite
587
+ def imports(
588
+ draw: DrawFn,
589
+ /,
590
+ *,
591
+ min_depth: MaybeSearchStrategy[int | None] = None,
592
+ max_depth: MaybeSearchStrategy[int | None] = None,
593
+ ) -> Import:
594
+ """Strategy for generating imports."""
595
+ from utilities.libcst import generate_import
596
+
597
+ min_depth_, max_depth_ = [draw2(draw, d) for d in [min_depth, max_depth]]
598
+ path = draw(
599
+ paths(
600
+ min_depth=1 if min_depth_ is None else max(min_depth_, 1),
601
+ max_depth=max_depth_,
602
+ )
603
+ )
604
+ module = ".".join(path.parts)
605
+ asname = draw(text_ascii(min_size=1) | none())
606
+ return generate_import(module, asname=asname)
607
+
608
+
609
+ ##
610
+
611
+
558
612
  @composite
559
613
  def int_arrays(
560
614
  draw: DrawFn,
@@ -746,11 +800,32 @@ def _pairs_map[T](elements: list[T], /) -> tuple[T, T]:
746
800
  ##
747
801
 
748
802
 
749
- def paths() -> SearchStrategy[Path]:
803
+ @composite
804
+ def paths(
805
+ draw: DrawFn,
806
+ /,
807
+ *,
808
+ min_depth: MaybeSearchStrategy[int | None] = None,
809
+ max_depth: MaybeSearchStrategy[int | None] = None,
810
+ ) -> Path:
750
811
  """Strategy for generating `Path`s."""
812
+ min_depth_, max_depth_ = [draw2(draw, d) for d in [min_depth, max_depth]]
813
+ parts = draw(
814
+ lists(
815
+ _path_parts(),
816
+ min_size=0 if min_depth_ is None else min_depth_,
817
+ max_size=max_depth_,
818
+ )
819
+ )
820
+ return Path(*parts)
821
+
822
+
823
+ @composite
824
+ def _path_parts(draw: DrawFn, /) -> str:
825
+ part = draw(text_ascii(min_size=1, max_size=10))
751
826
  reserved = {"AUX", "NUL"}
752
- strategy = text_ascii(min_size=1, max_size=10).filter(lambda x: x not in reserved)
753
- return lists(strategy, max_size=10).map(lambda parts: Path(*parts))
827
+ _ = assume(part not in reserved)
828
+ return part
754
829
 
755
830
 
756
831
  ##
@@ -1292,6 +1367,8 @@ __all__ = [
1292
1367
  "freqs",
1293
1368
  "git_repos",
1294
1369
  "hashables",
1370
+ "import_froms",
1371
+ "imports",
1295
1372
  "int32s",
1296
1373
  "int64s",
1297
1374
  "int_arrays",
@@ -23,16 +23,6 @@ from libcst import (
23
23
  from utilities.errors import ImpossibleCaseError
24
24
 
25
25
 
26
- def generate_from_import(
27
- module: str, name: str, /, *, asname: str | None = None
28
- ) -> ImportFrom:
29
- """Generate an `ImportFrom` object."""
30
- alias = ImportAlias(
31
- name=Name(name), asname=AsName(Name(asname)) if asname else None
32
- )
33
- return ImportFrom(module=split_dotted_str(module), names=[alias])
34
-
35
-
36
26
  def generate_f_string(var: str, suffix: str, /) -> FormattedString:
37
27
  """Generate an f-string."""
38
28
  return FormattedString([
@@ -49,6 +39,16 @@ def generate_import(module: str, /, *, asname: str | None = None) -> Import:
49
39
  return Import(names=[alias])
50
40
 
51
41
 
42
+ def generate_import_from(
43
+ module: str, name: str, /, *, asname: str | None = None
44
+ ) -> ImportFrom:
45
+ """Generate an `ImportFrom` object."""
46
+ alias = ImportAlias(
47
+ name=Name(name), asname=AsName(Name(asname)) if asname else None
48
+ )
49
+ return ImportFrom(module=split_dotted_str(module), names=[alias])
50
+
51
+
52
52
  ##
53
53
 
54
54
 
@@ -170,8 +170,8 @@ def render_module(source: str | Module, /) -> str:
170
170
  __all__ = [
171
171
  "ParseImportError",
172
172
  "generate_f_string",
173
- "generate_from_import",
174
173
  "generate_import",
174
+ "generate_import_from",
175
175
  "join_dotted_str",
176
176
  "parse_import",
177
177
  "render_module",