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.
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/PKG-INFO +1 -1
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/pyproject.toml +3 -3
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_hypothesis.py +43 -1
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_libcst.py +17 -17
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/__init__.py +1 -1
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/hypothesis.py +80 -3
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/libcst.py +11 -11
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/.gitignore +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/LICENSE +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/README.md +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/__init__.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/conftest.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/modules/__init__.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/modules/package_missing/__init__.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/modules/package_missing/module.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/modules/package_with/__init__.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/modules/package_with/outer_1.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/modules/package_with/outer_2.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/modules/package_without/__init__.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/modules/package_without/module_1.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/modules/package_without/module_2.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/modules/standalone.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/modules/with_imports.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_aiolimiter.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_altair.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_asyncio.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_asyncio_classes/__init__.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_asyncio_classes/loopers.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_asyncio_classes/redis.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_atomicwrites.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_atools.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_cachetools.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_click.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_concurrent.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_contextlib.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_contextvars.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_cryptography.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_cvxpy.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_dataclasses.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_enum.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_errors.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_eventkit.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_fastapi.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_fpdf2.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_functions.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_functools.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_getpass.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_git.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_hashlib.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_http.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_importlib.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_inflect.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_ipython.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_iterables.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_jupyter.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_lightweight_charts.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_logging.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_luigi.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_math.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_memory_profiler.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_modules.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_more_itertools.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_numpy.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_objects/__init__.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_objects/objects.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_operator.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_optuna.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_orjson.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_os.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_parse.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_pathlib.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_period.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_pickle.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_platform.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_polars.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_polars_ols.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_pottery.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_pqdm.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_psutil.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_pydantic.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_pyinstrument.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_pytest.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_pytest_regressions.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_python_dotenv.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_random.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_re.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_redis.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_reprlib.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_scipy.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_sentinel.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_shelve.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_slack_sdk.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_socket.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_sqlalchemy.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_statsmodels.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_streamlit.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_string.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_tempfile.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_text.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_threading.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_timer.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_traceback.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_typed_settings.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_types.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_typing.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_typing_funcs/__init__.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_typing_funcs/no_future.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_typing_funcs/with_future.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_tzdata.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_tzlocal.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_uuid.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_version.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_warnings.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_whenever.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_zipfile.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_zoneinfo.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/aiolimiter.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/altair.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/asyncio.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/atomicwrites.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/atools.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/cachetools.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/click.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/concurrent.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/contextlib.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/contextvars.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/cryptography.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/cvxpy.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/dataclasses.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/enum.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/errors.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/eventkit.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/fastapi.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/fpdf2.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/functions.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/functools.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/getpass.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/git.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/hashlib.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/http.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/importlib.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/inflect.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/ipython.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/iterables.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/jupyter.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/lightweight_charts.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/logging.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/luigi.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/math.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/memory_profiler.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/modules.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/more_itertools.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/numpy.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/operator.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/optuna.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/orjson.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/os.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/parse.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/pathlib.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/period.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/pickle.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/platform.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/polars.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/polars_ols.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/pottery.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/pqdm.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/psutil.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/py.typed +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/pydantic.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/pyinstrument.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/pytest.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/pytest_regressions.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/python_dotenv.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/random.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/re.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/redis.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/reprlib.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/scipy.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/sentinel.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/shelve.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/slack_sdk.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/socket.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/sqlalchemy.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/statsmodels.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/streamlit.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/string.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/tempfile.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/text.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/threading.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/timer.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/traceback.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/typed_settings.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/types.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/typing.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/tzdata.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/tzlocal.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/uuid.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/version.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/warnings.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/whenever.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/zipfile.py +0 -0
- {dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/utilities/zoneinfo.py +0 -0
@@ -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.
|
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.
|
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
|
-
|
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"))])
|
@@ -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
|
-
|
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
|
-
|
753
|
-
return
|
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",
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/modules/package_missing/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/modules/package_missing/module.py
RENAMED
File without changes
|
{dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/modules/package_with/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/modules/package_without/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/modules/package_without/module_1.py
RENAMED
File without changes
|
{dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/modules/package_without/module_2.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_asyncio_classes/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.136.4 → dycw_utilities-0.136.5}/src/tests/test_typing_funcs/with_future.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|