dycw-utilities 0.112.2__tar.gz → 0.112.3__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.112.2 → dycw_utilities-0.112.3}/PKG-INFO +1 -1
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/pyproject.toml +2 -2
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_typing.py +82 -23
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/__init__.py +1 -1
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/typing.py +52 -35
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/.gitignore +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/LICENSE +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/README.md +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/__init__.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/conftest.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/modules/__init__.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/modules/package_missing/__init__.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/modules/package_missing/module.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/modules/package_with/__init__.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/modules/package_with/outer_1.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/modules/package_with/outer_2.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/modules/package_without/__init__.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/modules/package_without/module_1.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/modules/package_without/module_2.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/modules/standalone.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/modules/with_imports.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/scripts/__init__.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/scripts/test_async_service/__init__.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/scripts/test_async_service/__main__.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/scripts/test_async_service/run.sh +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/scripts/test_queue_processor/__init__.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/scripts/test_queue_processor/__main__.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/scripts/test_queue_processor/run.sh +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_altair.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_astor.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_asyncio.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_atomicwrites.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_atools.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_cachetools.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_click.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_concurrent.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_contextlib.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_contextvars.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_cryptography.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_cvxpy.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_dataclasses.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_datetime.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_enum.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_errors.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_eventkit.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_fastapi.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_fpdf2.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_functions.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_functools.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_getpass.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_git.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_hashlib.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_http.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_hypothesis.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_ipython.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_iterables.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_jupyter.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_lightweight_charts.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_logging.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_loguru.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_luigi.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_math.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_memory_profiler.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_modules.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_more_itertools.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_numpy.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_operator.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_optuna.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_orjson.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_os.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_parse.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_pathlib.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_period.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_pickle.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_platform.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_polars.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_polars_ols.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_pqdm.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_pydantic.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_pyinstrument.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_pyrsistent.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_pytest.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_pytest_regressions.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_python_dotenv.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_random.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_re.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_redis.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_reprlib.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_rich.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_scipy.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_sentinel.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_shelve.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_slack_sdk.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_socket.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_sqlalchemy.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_statsmodel.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_streamlit.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_sys.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_tempfile.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_tenacity.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_text.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_threading.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_timer.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_traceback.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_traceback_funcs/__init__.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_traceback_funcs/chain.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_traceback_funcs/decorated_async.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_traceback_funcs/decorated_sync.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_traceback_funcs/error_bind.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_traceback_funcs/many.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_traceback_funcs/one.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_traceback_funcs/recursive.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_traceback_funcs/task_group_one.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_traceback_funcs/task_group_two.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_traceback_funcs/two.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_traceback_funcs/untraced.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_types.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_typing_funcs/__init__.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_typing_funcs/no_future.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_typing_funcs/with_future.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_tzdata.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_tzlocal.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_uuid.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_version.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_warnings.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_whenever.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_zipfile.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/test_zoneinfo.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/altair.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/astor.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/asyncio.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/atomicwrites.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/atools.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/cachetools.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/click.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/concurrent.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/contextlib.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/contextvars.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/cryptography.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/cvxpy.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/dataclasses.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/datetime.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/enum.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/errors.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/eventkit.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/fastapi.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/fpdf2.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/functions.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/functools.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/getpass.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/git.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/hashlib.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/http.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/hypothesis.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/ipython.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/iterables.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/jupyter.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/lightweight_charts.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/logging.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/loguru.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/luigi.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/math.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/memory_profiler.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/modules.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/more_itertools.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/numpy.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/operator.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/optuna.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/orjson.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/os.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/parse.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/pathlib.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/period.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/pickle.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/platform.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/polars.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/polars_ols.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/pqdm.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/py.typed +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/pydantic.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/pyinstrument.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/pyrsistent.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/pytest.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/pytest_regressions.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/python_dotenv.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/random.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/re.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/redis.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/reprlib.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/rich.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/scipy.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/sentinel.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/shelve.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/slack_sdk.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/socket.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/sqlalchemy.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/statsmodels.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/streamlit.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/sys.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/tempfile.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/tenacity.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/text.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/threading.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/timer.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/traceback.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/types.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/tzdata.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/tzlocal.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/uuid.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/version.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/warnings.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/whenever.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/zipfile.py +0 -0
- {dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/utilities/zoneinfo.py +0 -0
@@ -94,7 +94,7 @@ dependencies = [
|
|
94
94
|
name = "dycw-utilities"
|
95
95
|
readme = "README.md"
|
96
96
|
requires-python = ">= 3.12"
|
97
|
-
version = "0.112.
|
97
|
+
version = "0.112.3"
|
98
98
|
|
99
99
|
[project.optional-dependencies]
|
100
100
|
test = [
|
@@ -337,7 +337,7 @@ zzz-test-zoneinfo = [
|
|
337
337
|
# bump-my-version
|
338
338
|
[tool.bumpversion]
|
339
339
|
allow_dirty = true
|
340
|
-
current_version = "0.112.
|
340
|
+
current_version = "0.112.3"
|
341
341
|
|
342
342
|
[[tool.bumpversion.files]]
|
343
343
|
filename = "src/utilities/__init__.py"
|
@@ -6,7 +6,7 @@ from dataclasses import dataclass
|
|
6
6
|
from pathlib import Path
|
7
7
|
from random import Random
|
8
8
|
from types import NoneType
|
9
|
-
from typing import TYPE_CHECKING, Any, Literal, NamedTuple, Self
|
9
|
+
from typing import TYPE_CHECKING, Any, Final, Literal, NamedTuple, Self
|
10
10
|
from uuid import UUID
|
11
11
|
|
12
12
|
from hypothesis import given
|
@@ -56,6 +56,7 @@ from tests.test_typing_funcs.with_future import (
|
|
56
56
|
from utilities.sentinel import Sentinel
|
57
57
|
from utilities.types import Duration, LogLevel, Number, Parallelism, Seed
|
58
58
|
from utilities.typing import (
|
59
|
+
IsInstanceGenError,
|
59
60
|
IsSubclassGenError,
|
60
61
|
_GetTypeClassesTupleError,
|
61
62
|
_GetTypeClassesTypeError,
|
@@ -500,34 +501,57 @@ class TestIsInstanceGen:
|
|
500
501
|
@given(
|
501
502
|
data=data(),
|
502
503
|
case=sampled_from([
|
504
|
+
# types - bool/int
|
503
505
|
(booleans(), bool, None, True),
|
504
506
|
(booleans(), int, None, False),
|
505
507
|
(integers(), bool, None, False),
|
506
508
|
(integers(), int, None, True),
|
507
509
|
(booleans(), (bool, int), None, True),
|
508
510
|
(integers(), (bool, int), None, True),
|
511
|
+
# types - datetime/date
|
509
512
|
(dates(), dt.date, None, True),
|
510
513
|
(dates(), dt.datetime, None, False),
|
511
514
|
(datetimes(), dt.date, None, False),
|
512
515
|
(datetimes(), dt.datetime, None, True),
|
516
|
+
# parent union
|
513
517
|
(booleans(), Number, None, False),
|
514
518
|
(integers(), Number, None, True),
|
515
519
|
(floats(), Number, None, True),
|
516
|
-
|
517
|
-
|
518
|
-
(tuples(integers()), (bool,), None, False),
|
519
|
-
(tuples(integers()), (int,), None, True),
|
520
|
-
(tuples(integers()), (int, int), None, False),
|
521
|
-
(integers(), int | None, None, True),
|
522
|
-
(integers() | none(), int, None, False),
|
523
|
-
(integers() | none(), int | None, None, True),
|
520
|
+
# child tuple/union - skip
|
521
|
+
# literals
|
524
522
|
(sampled_from([1, 2]), Literal[1, 2, 3], 2, True),
|
525
523
|
(sampled_from([1, 2, 3]), Literal[1, 2, 3], 3, True),
|
526
524
|
(sampled_from([1, 2, 3]), Literal[1, 2], 3, False),
|
527
|
-
(
|
525
|
+
(sampled_from([1, 2, 3]), int, 3, True),
|
528
526
|
(sampled_from([1, 2, 3]), bool, 3, False),
|
529
|
-
(
|
530
|
-
(sampled_from([1, 2, 3]),
|
527
|
+
(sampled_from(["1", "2", "3"]), str, 3, True),
|
528
|
+
(sampled_from(["1", "2", "3"]), bool, 3, False),
|
529
|
+
(sampled_from([1, "2", 3]), int | str, 3, True),
|
530
|
+
(sampled_from([1, "2", 3]), int, 3, False),
|
531
|
+
(sampled_from([1, "2", 3]), str, 3, False),
|
532
|
+
(booleans(), Literal[1, 2, 3], None, False),
|
533
|
+
# tuple types
|
534
|
+
(tuples(booleans()), tuple[bool], None, True),
|
535
|
+
(tuples(booleans()), tuple[int], None, False),
|
536
|
+
(tuples(integers()), tuple[bool], None, False),
|
537
|
+
(tuples(integers()), tuple[int], None, True),
|
538
|
+
(tuples(booleans()), tuple[Number], None, False),
|
539
|
+
(tuples(integers()), tuple[Number], None, True),
|
540
|
+
(tuples(floats()), tuple[Number], None, True),
|
541
|
+
(tuples(booleans()), bool, None, False),
|
542
|
+
(tuples(just("a"), booleans()), tuple[Literal["a"], bool], None, True),
|
543
|
+
(tuples(just("a"), booleans()), tuple[Literal["a"], int], None, False),
|
544
|
+
(tuples(just("a"), integers()), tuple[Literal["a"], bool], None, False),
|
545
|
+
(tuples(just("a"), integers()), tuple[Literal["a"], int], None, True),
|
546
|
+
(tuples(just("a"), booleans()), tuple[Literal["a", "b"], bool], None, True),
|
547
|
+
(tuples(just("a"), booleans()), tuple[Literal["a", "b"], int], None, False),
|
548
|
+
(
|
549
|
+
tuples(just("a"), integers()),
|
550
|
+
tuple[Literal["a", "b"], bool],
|
551
|
+
None,
|
552
|
+
False,
|
553
|
+
),
|
554
|
+
(tuples(just("a"), integers()), tuple[Literal["a", "b"], int], None, True),
|
531
555
|
]),
|
532
556
|
)
|
533
557
|
def test_main(
|
@@ -560,6 +584,12 @@ class TestIsInstanceGen:
|
|
560
584
|
assert not is_instance_gen(int_, MyInt)
|
561
585
|
assert is_instance_gen(MyInt(int_), MyInt)
|
562
586
|
|
587
|
+
def test_error(self) -> None:
|
588
|
+
with raises(
|
589
|
+
IsInstanceGenError, match=r"Invalid arguments; got None and typing\.Final"
|
590
|
+
):
|
591
|
+
_ = is_instance_gen(None, Final)
|
592
|
+
|
563
593
|
|
564
594
|
class TestIsNamedTuple:
|
565
595
|
def test_main(self) -> None:
|
@@ -581,34 +611,63 @@ class TestIsNamedTuple:
|
|
581
611
|
class TestIsSubclassGen:
|
582
612
|
@given(
|
583
613
|
case=sampled_from([
|
614
|
+
# types - bool/int
|
584
615
|
(bool, bool, True),
|
585
616
|
(bool, int, False),
|
586
617
|
(int, bool, False),
|
587
618
|
(int, int, True),
|
588
619
|
(bool, (bool, int), True),
|
589
620
|
(int, (bool, int), True),
|
621
|
+
# types - datetime/date
|
590
622
|
(dt.date, dt.date, True),
|
591
623
|
(dt.date, dt.datetime, False),
|
592
624
|
(dt.datetime, dt.date, False),
|
593
625
|
(dt.datetime, dt.datetime, True),
|
626
|
+
# parent union
|
594
627
|
(bool, Number, False),
|
595
628
|
(int, Number, True),
|
596
629
|
(float, Number, True),
|
597
|
-
|
598
|
-
((bool,),
|
599
|
-
((
|
600
|
-
((int,),
|
601
|
-
((int,),
|
602
|
-
(int, int
|
603
|
-
(int
|
604
|
-
(int
|
630
|
+
# child tuple
|
631
|
+
((bool,), bool, True),
|
632
|
+
((bool,), int, False),
|
633
|
+
((int,), bool, False),
|
634
|
+
((int,), int, True),
|
635
|
+
((bool, int), int, False),
|
636
|
+
((bool, int), (bool, int), True),
|
637
|
+
((bool, int), (bool, int, float), True),
|
638
|
+
# child union
|
639
|
+
(bool, bool | None, True),
|
640
|
+
(bool | None, bool, False),
|
641
|
+
(bool | None, bool | None, True),
|
642
|
+
# literals
|
605
643
|
(Literal[1, 2], Literal[1, 2, 3], True),
|
606
644
|
(Literal[1, 2, 3], Literal[1, 2, 3], True),
|
607
645
|
(Literal[1, 2, 3], Literal[1, 2], False),
|
608
|
-
(
|
646
|
+
(Literal[1, 2, 3], int, True),
|
609
647
|
(Literal[1, 2, 3], bool, False),
|
610
|
-
(
|
611
|
-
(Literal[1, 2, 3],
|
648
|
+
(Literal["1", "2", "3"], str, True),
|
649
|
+
(Literal["1", "2", "3"], bool, False),
|
650
|
+
(Literal[1, "2", 3], int | str, True),
|
651
|
+
(Literal[1, "2", 3], int, False),
|
652
|
+
(Literal[1, "2", 3], str, False),
|
653
|
+
(bool, Literal[1, 2, 3], False),
|
654
|
+
# tuple types
|
655
|
+
(tuple[bool], tuple[bool], True),
|
656
|
+
(tuple[bool], tuple[int], False),
|
657
|
+
(tuple[int], tuple[bool], False),
|
658
|
+
(tuple[int], tuple[int], True),
|
659
|
+
(tuple[bool], tuple[Number], False),
|
660
|
+
(tuple[int], tuple[Number], True),
|
661
|
+
(tuple[float], tuple[Number], True),
|
662
|
+
(tuple[bool], bool, False),
|
663
|
+
(tuple[Literal["a"], bool], tuple[Literal["a"], bool], True),
|
664
|
+
(tuple[Literal["a"], bool], tuple[Literal["a"], int], False),
|
665
|
+
(tuple[Literal["a"], int], tuple[Literal["a"], bool], False),
|
666
|
+
(tuple[Literal["a"], int], tuple[Literal["a"], int], True),
|
667
|
+
(tuple[Literal["a"], bool], tuple[Literal["a", "b"], bool], True),
|
668
|
+
(tuple[Literal["a"], bool], tuple[Literal["a", "b"], int], False),
|
669
|
+
(tuple[Literal["a"], int], tuple[Literal["a", "b"], bool], False),
|
670
|
+
(tuple[Literal["a"], int], tuple[Literal["a", "b"], int], True),
|
612
671
|
])
|
613
672
|
)
|
614
673
|
def test_main(self, *, case: tuple[type[Any], Any, bool]) -> None:
|
@@ -230,21 +230,23 @@ def is_instance_gen(
|
|
230
230
|
def is_instance_gen(obj: Any, type_: Any, /) -> bool: ...
|
231
231
|
def is_instance_gen(obj: Any, type_: Any, /) -> bool:
|
232
232
|
"""Check if an instance relationship holds, except bool<int."""
|
233
|
-
|
234
|
-
|
233
|
+
# parent
|
234
|
+
if isinstance(type_, tuple):
|
235
|
+
return any(is_instance_gen(obj, t) for t in type_)
|
235
236
|
if is_literal_type(type_):
|
236
|
-
return
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
237
|
+
return obj in get_args(type_)
|
238
|
+
if is_union_type(type_):
|
239
|
+
return any(is_instance_gen(obj, t) for t in get_args(type_))
|
240
|
+
# tuple vs tuple
|
241
|
+
if isinstance(obj, tuple) and is_tuple_type(type_):
|
242
|
+
type_args = get_args(type_)
|
243
|
+
return (len(obj) == len(type_args)) and all(
|
244
|
+
is_instance_gen(o, t) for o, t in zip(obj, type_args, strict=True)
|
245
|
+
)
|
246
|
+
# basic
|
247
|
+
if isinstance(type_, type):
|
248
|
+
return any(_is_instance_gen_type(obj, t) for t in get_type_classes(type_))
|
249
|
+
raise IsInstanceGenError(obj=obj, type_=type_)
|
248
250
|
|
249
251
|
|
250
252
|
def _is_instance_gen_type(obj: Any, type_: type[_T], /) -> TypeGuard[_T]:
|
@@ -263,6 +265,16 @@ def _is_instance_gen_type(obj: Any, type_: type[_T], /) -> TypeGuard[_T]:
|
|
263
265
|
)
|
264
266
|
|
265
267
|
|
268
|
+
@dataclass(kw_only=True, slots=True)
|
269
|
+
class IsInstanceGenError(Exception):
|
270
|
+
obj: Any
|
271
|
+
type_: Any
|
272
|
+
|
273
|
+
@override
|
274
|
+
def __str__(self) -> str:
|
275
|
+
return f"Invalid arguments; got {self.obj!r} and {self.type_!r}"
|
276
|
+
|
277
|
+
|
266
278
|
##
|
267
279
|
|
268
280
|
|
@@ -367,14 +379,32 @@ def is_subclass_gen(
|
|
367
379
|
def is_subclass_gen(cls: Any, parent: Any, /) -> bool: ...
|
368
380
|
def is_subclass_gen(cls: Any, parent: Any, /) -> bool:
|
369
381
|
"""Generalized `issubclass`."""
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
return
|
382
|
+
# child
|
383
|
+
if isinstance(cls, tuple):
|
384
|
+
return all(is_subclass_gen(c, parent) for c in cls)
|
385
|
+
if is_literal_type(cls):
|
386
|
+
types = tuple(map(type, get_args(cls)))
|
387
|
+
return (
|
388
|
+
is_literal_type(parent) and set(get_args(cls)).issubset(get_args(parent))
|
389
|
+
) or is_subclass_gen(types, parent)
|
376
390
|
if is_union_type(cls):
|
377
|
-
return
|
391
|
+
return all(is_subclass_gen(c, parent) for c in get_args(cls))
|
392
|
+
# parent
|
393
|
+
if isinstance(parent, tuple):
|
394
|
+
return any(is_subclass_gen(cls, p) for p in parent)
|
395
|
+
if is_literal_type(parent):
|
396
|
+
return is_literal_type(cls) and set(get_args(cls)).issubset(get_args(parent))
|
397
|
+
if is_union_type(parent):
|
398
|
+
return any(is_subclass_gen(cls, p) for p in get_args(parent))
|
399
|
+
# tuple vs tuple
|
400
|
+
if is_tuple_type(cls) and is_tuple_type(parent):
|
401
|
+
cls_args, parent_args = get_args(cls), get_args(parent)
|
402
|
+
return (len(cls_args) == len(parent_args)) and all(
|
403
|
+
is_subclass_gen(c, p) for c, p in zip(cls_args, parent_args, strict=True)
|
404
|
+
)
|
405
|
+
if is_tuple_type(cls) is not is_tuple_type(parent):
|
406
|
+
return False
|
407
|
+
# basic
|
378
408
|
if isinstance(cls, type):
|
379
409
|
return any(_is_subclass_gen_type(cls, p) for p in get_type_classes(parent))
|
380
410
|
raise IsSubclassGenError(cls=cls)
|
@@ -396,20 +426,6 @@ def _is_subclass_gen_type(cls: type[Any], parent: type[_T], /) -> TypeGuard[type
|
|
396
426
|
)
|
397
427
|
|
398
428
|
|
399
|
-
def _is_subclass_gen_tuple(cls: tuple[Any, ...], parent: tuple[Any, ...], /) -> bool:
|
400
|
-
return (len(cls) == len(parent)) and all(
|
401
|
-
is_subclass_gen(c, p) for c, p in zip(cls, parent, strict=True)
|
402
|
-
)
|
403
|
-
|
404
|
-
|
405
|
-
def _is_subclass_gen_literal(cls: Any, parent: Any, /) -> bool:
|
406
|
-
return set(get_args(cls)).issubset(get_args(parent))
|
407
|
-
|
408
|
-
|
409
|
-
def _is_subclass_gen_union(cls: Any, parent: Any, /) -> bool:
|
410
|
-
return all(is_subclass_gen(a, parent) for a in get_args(cls))
|
411
|
-
|
412
|
-
|
413
429
|
@dataclass(kw_only=True, slots=True)
|
414
430
|
class IsSubclassGenError(Exception):
|
415
431
|
cls: Any
|
@@ -449,6 +465,7 @@ def _is_annotation_of_type(obj: Any, origin: Any, /) -> bool:
|
|
449
465
|
__all__ = [
|
450
466
|
"GetTypeClassesError",
|
451
467
|
"GetUnionTypeClassesError",
|
468
|
+
"IsInstanceGenError",
|
452
469
|
"IsSubclassGenError",
|
453
470
|
"contains_self",
|
454
471
|
"get_literal_elements",
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/modules/package_missing/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/modules/package_missing/module.py
RENAMED
File without changes
|
{dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/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.112.2 → dycw_utilities-0.112.3}/src/tests/modules/package_without/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/modules/package_without/module_1.py
RENAMED
File without changes
|
{dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/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
|
{dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/scripts/test_async_service/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/scripts/test_async_service/__main__.py
RENAMED
File without changes
|
{dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/scripts/test_async_service/run.sh
RENAMED
File without changes
|
{dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/scripts/test_queue_processor/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/scripts/test_queue_processor/__main__.py
RENAMED
File without changes
|
{dycw_utilities-0.112.2 → dycw_utilities-0.112.3}/src/tests/scripts/test_queue_processor/run.sh
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
|