dycw-utilities 0.125.9__tar.gz → 0.125.10__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.125.9 → dycw_utilities-0.125.10}/PKG-INFO +2 -2
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/pyproject.toml +4 -4
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_iterables.py +64 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/__init__.py +1 -1
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/iterables.py +52 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/.gitignore +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/LICENSE +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/README.md +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/__init__.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/conftest.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/modules/__init__.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/modules/package_missing/__init__.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/modules/package_missing/module.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/modules/package_with/__init__.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/modules/package_with/outer_1.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/modules/package_with/outer_2.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/modules/package_without/__init__.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/modules/package_without/module_1.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/modules/package_without/module_2.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/modules/standalone.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/modules/with_imports.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_altair.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_asyncio.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_atomicwrites.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_atools.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_cachetools.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_click.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_concurrent.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_contextlib.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_contextvars.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_cryptography.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_cvxpy.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_dataclasses.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_datetime.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_enum.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_errors.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_eventkit.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_fastapi.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_fpdf2.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_functions.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_functools.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_getpass.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_git.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_hashlib.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_http.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_hypothesis.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_importlib.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_ipython.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_jupyter.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_libcst.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_lightweight_charts.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_logging.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_loguru.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_luigi.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_math.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_memory_profiler.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_modules.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_more_itertools.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_numpy.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_operator.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_optuna.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_orjson.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_os.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_parse.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_pathlib.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_period.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_pickle.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_platform.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_polars.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_polars_ols.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_pqdm.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_pydantic.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_pyinstrument.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_pyrsistent.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_pytest.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_pytest_regressions.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_python_dotenv.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_random.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_re.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_redis.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_reprlib.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_rich.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_scipy.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_sentinel.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_shelve.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_slack_sdk.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_socket.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_sqlalchemy.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_statsmodel.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_streamlit.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_sys.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_tempfile.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_tenacity.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_text.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_threading.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_timer.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_traceback.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_traceback_funcs/__init__.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_traceback_funcs/chain.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_traceback_funcs/decorated_async.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_traceback_funcs/decorated_sync.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_traceback_funcs/error_bind.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_traceback_funcs/many.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_traceback_funcs/one.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_traceback_funcs/recursive.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_traceback_funcs/task_group_one.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_traceback_funcs/task_group_two.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_traceback_funcs/two.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_traceback_funcs/untraced.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_types.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_typing.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_typing_funcs/__init__.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_typing_funcs/no_future.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_typing_funcs/with_future.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_tzdata.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_tzlocal.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_uuid.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_version.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_warnings.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_whenever.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_zipfile.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_zoneinfo.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/altair.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/asyncio.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/atomicwrites.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/atools.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/cachetools.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/click.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/concurrent.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/contextlib.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/contextvars.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/cryptography.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/cvxpy.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/dataclasses.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/datetime.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/enum.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/errors.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/eventkit.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/fastapi.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/fpdf2.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/functions.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/functools.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/getpass.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/git.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/hashlib.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/http.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/hypothesis.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/importlib.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/ipython.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/jupyter.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/libcst.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/lightweight_charts.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/logging.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/loguru.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/luigi.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/math.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/memory_profiler.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/modules.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/more_itertools.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/numpy.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/operator.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/optuna.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/orjson.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/os.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/parse.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/pathlib.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/period.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/pickle.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/platform.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/polars.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/polars_ols.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/pqdm.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/py.typed +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/pydantic.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/pyinstrument.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/pyrsistent.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/pytest.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/pytest_regressions.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/python_dotenv.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/random.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/re.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/redis.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/reprlib.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/rich.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/scipy.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/sentinel.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/shelve.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/slack_sdk.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/socket.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/sqlalchemy.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/statsmodels.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/streamlit.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/sys.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/tempfile.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/tenacity.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/text.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/threading.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/timer.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/traceback.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/types.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/typing.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/tzdata.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/tzlocal.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/uuid.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/version.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/warnings.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/whenever.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/zipfile.py +0 -0
- {dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/utilities/zoneinfo.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: dycw-utilities
|
3
|
-
Version: 0.125.
|
3
|
+
Version: 0.125.10
|
4
4
|
Author-email: Derek Wan <d.wan@icloud.com>
|
5
5
|
License-File: LICENSE
|
6
6
|
Requires-Python: >=3.12
|
@@ -174,7 +174,7 @@ Requires-Dist: scipy<1.16,>=1.15.3; extra == 'zzz-test-scipy'
|
|
174
174
|
Provides-Extra: zzz-test-sentinel
|
175
175
|
Provides-Extra: zzz-test-shelve
|
176
176
|
Provides-Extra: zzz-test-slack-sdk
|
177
|
-
Requires-Dist: aiohttp<3.12.
|
177
|
+
Requires-Dist: aiohttp<3.12.3,>=3.12.2; extra == 'zzz-test-slack-sdk'
|
178
178
|
Requires-Dist: slack-sdk<3.36,>=3.35.0; extra == 'zzz-test-slack-sdk'
|
179
179
|
Provides-Extra: zzz-test-socket
|
180
180
|
Provides-Extra: zzz-test-sqlalchemy
|
@@ -8,7 +8,7 @@ requires = ["hatchling"]
|
|
8
8
|
# dependency groups
|
9
9
|
[dependency-groups]
|
10
10
|
dev = [
|
11
|
-
"aiohttp >= 3.12.
|
11
|
+
"aiohttp >= 3.12.2, < 3.12.3", # for slack
|
12
12
|
"aiosqlite >= 0.21.0, < 0.22",
|
13
13
|
"altair >= 5.5.0, < 5.6",
|
14
14
|
"asyncpg >= 0.30.0, < 0.31", # for sqlalchemy async
|
@@ -93,7 +93,7 @@ dependencies = [
|
|
93
93
|
name = "dycw-utilities"
|
94
94
|
readme = "README.md"
|
95
95
|
requires-python = ">= 3.12"
|
96
|
-
version = "0.125.
|
96
|
+
version = "0.125.10"
|
97
97
|
|
98
98
|
[project.optional-dependencies]
|
99
99
|
test = [
|
@@ -270,7 +270,7 @@ zzz-test-scipy = ["scipy >= 1.15.3, < 1.16"]
|
|
270
270
|
zzz-test-sentinel = []
|
271
271
|
zzz-test-shelve = []
|
272
272
|
zzz-test-slack-sdk = [
|
273
|
-
"aiohttp >= 3.12.
|
273
|
+
"aiohttp >= 3.12.2, < 3.12.3", # for slack
|
274
274
|
"slack-sdk >= 3.35.0, < 3.36",
|
275
275
|
]
|
276
276
|
zzz-test-socket = []
|
@@ -334,7 +334,7 @@ zzz-test-zoneinfo = [
|
|
334
334
|
# bump-my-version
|
335
335
|
[tool.bumpversion]
|
336
336
|
allow_dirty = true
|
337
|
-
current_version = "0.125.
|
337
|
+
current_version = "0.125.10"
|
338
338
|
|
339
339
|
[[tool.bumpversion.files]]
|
340
340
|
filename = "src/utilities/__init__.py"
|
@@ -69,6 +69,9 @@ from utilities.iterables import (
|
|
69
69
|
_ApplyBijectionDuplicateValuesError,
|
70
70
|
_CheckUniqueModuloCaseDuplicateLowerCaseStringsError,
|
71
71
|
_CheckUniqueModuloCaseDuplicateStringsError,
|
72
|
+
_RangePartitionsNumError,
|
73
|
+
_RangePartitionsStopError,
|
74
|
+
_RangePartitionsTotalError,
|
72
75
|
_sort_iterable_cmp_datetimes,
|
73
76
|
_sort_iterable_cmp_floats,
|
74
77
|
always_iterable,
|
@@ -114,6 +117,7 @@ from utilities.iterables import (
|
|
114
117
|
one_unique,
|
115
118
|
pairwise_tail,
|
116
119
|
product_dicts,
|
120
|
+
range_partitions,
|
117
121
|
reduce_mappings,
|
118
122
|
resolve_include_and_exclude,
|
119
123
|
sort_iterable,
|
@@ -1091,6 +1095,66 @@ class TestProductDicts:
|
|
1091
1095
|
assert result == expected
|
1092
1096
|
|
1093
1097
|
|
1098
|
+
class TestRangePartitions:
|
1099
|
+
@given(
|
1100
|
+
case=sampled_from([
|
1101
|
+
(1, 0, 1, [0]),
|
1102
|
+
(2, 0, 1, [0, 1]),
|
1103
|
+
(2, 0, 2, [0]),
|
1104
|
+
(2, 1, 2, [1]),
|
1105
|
+
(3, 0, 1, [0, 1, 2]),
|
1106
|
+
(3, 0, 2, [0, 1]),
|
1107
|
+
(3, 1, 2, [2]),
|
1108
|
+
(3, 0, 3, [0]),
|
1109
|
+
(3, 1, 3, [1]),
|
1110
|
+
(3, 2, 3, [2]),
|
1111
|
+
(6, 0, 1, [0, 1, 2, 3, 4, 5]),
|
1112
|
+
(6, 0, 2, [0, 1, 2]),
|
1113
|
+
(6, 1, 2, [3, 4, 5]),
|
1114
|
+
(6, 0, 3, [0, 1]),
|
1115
|
+
(6, 1, 3, [2, 3]),
|
1116
|
+
(6, 2, 3, [4, 5]),
|
1117
|
+
(7, 0, 2, [0, 1, 2, 3]),
|
1118
|
+
(7, 1, 2, [4, 5, 6]),
|
1119
|
+
(7, 0, 3, [0, 1, 2]),
|
1120
|
+
(7, 1, 3, [3, 4]),
|
1121
|
+
(7, 2, 3, [5, 6]),
|
1122
|
+
])
|
1123
|
+
)
|
1124
|
+
def test_main(self, *, case: tuple[int, int, int, Sequence[int]]) -> None:
|
1125
|
+
stop, num, total, expected = case
|
1126
|
+
result = list(range_partitions(stop, num, total))
|
1127
|
+
assert result == expected
|
1128
|
+
|
1129
|
+
def test_error_stop(self) -> None:
|
1130
|
+
with raises(_RangePartitionsStopError, match="'stop' must be positive; got 0"):
|
1131
|
+
_ = range_partitions(0, 0, 0)
|
1132
|
+
|
1133
|
+
def test_error_total_too_low(self) -> None:
|
1134
|
+
with raises(
|
1135
|
+
_RangePartitionsTotalError, match=r"'total' must be in \[1, 1\]; got 0"
|
1136
|
+
):
|
1137
|
+
_ = range_partitions(1, 0, 0)
|
1138
|
+
|
1139
|
+
def test_error_total_too_high(self) -> None:
|
1140
|
+
with raises(
|
1141
|
+
_RangePartitionsTotalError, match=r"'total' must be in \[1, 1\]; got 2"
|
1142
|
+
):
|
1143
|
+
_ = range_partitions(1, 0, 2)
|
1144
|
+
|
1145
|
+
def test_error_num_too_low(self) -> None:
|
1146
|
+
with raises(
|
1147
|
+
_RangePartitionsNumError, match=r"'num' must be in \[0, 1\]; got -1"
|
1148
|
+
):
|
1149
|
+
_ = range_partitions(2, -1, 2)
|
1150
|
+
|
1151
|
+
def test_error_num_too_high(self) -> None:
|
1152
|
+
with raises(
|
1153
|
+
_RangePartitionsNumError, match=r"'num' must be in \[0, 1\]; got 2"
|
1154
|
+
):
|
1155
|
+
_ = range_partitions(2, 2, 2)
|
1156
|
+
|
1157
|
+
|
1094
1158
|
class TestReduceMappings:
|
1095
1159
|
@given(
|
1096
1160
|
mappings=lists(dictionaries(text_ascii(), integers())),
|
@@ -1190,6 +1190,56 @@ def product_dicts(mapping: Mapping[_K, Iterable[_V]], /) -> Iterator[Mapping[_K,
|
|
1190
1190
|
##
|
1191
1191
|
|
1192
1192
|
|
1193
|
+
def range_partitions(stop: int, num: int, total: int, /) -> range:
|
1194
|
+
"""Partition a range."""
|
1195
|
+
if stop <= 0:
|
1196
|
+
raise _RangePartitionsStopError(stop=stop)
|
1197
|
+
if not (1 <= total <= stop):
|
1198
|
+
raise _RangePartitionsTotalError(stop=stop, total=total)
|
1199
|
+
if not (0 <= num < total):
|
1200
|
+
raise _RangePartitionsNumError(num=num, total=total)
|
1201
|
+
q, r = divmod(stop, total)
|
1202
|
+
start = num * q + min(num, r)
|
1203
|
+
end = start + q + (1 if num < r else 0)
|
1204
|
+
return range(start, end)
|
1205
|
+
|
1206
|
+
|
1207
|
+
@dataclass(kw_only=True, slots=True)
|
1208
|
+
class RangePartitionsError(Exception): ...
|
1209
|
+
|
1210
|
+
|
1211
|
+
@dataclass(kw_only=True, slots=True)
|
1212
|
+
class _RangePartitionsStopError(RangePartitionsError):
|
1213
|
+
stop: int
|
1214
|
+
|
1215
|
+
@override
|
1216
|
+
def __str__(self) -> str:
|
1217
|
+
return f"'stop' must be positive; got {self.stop}"
|
1218
|
+
|
1219
|
+
|
1220
|
+
@dataclass(kw_only=True, slots=True)
|
1221
|
+
class _RangePartitionsTotalError(RangePartitionsError):
|
1222
|
+
stop: int
|
1223
|
+
total: int
|
1224
|
+
|
1225
|
+
@override
|
1226
|
+
def __str__(self) -> str:
|
1227
|
+
return f"'total' must be in [1, {self.stop}]; got {self.total}"
|
1228
|
+
|
1229
|
+
|
1230
|
+
@dataclass(kw_only=True, slots=True)
|
1231
|
+
class _RangePartitionsNumError(RangePartitionsError):
|
1232
|
+
num: int
|
1233
|
+
total: int
|
1234
|
+
|
1235
|
+
@override
|
1236
|
+
def __str__(self) -> str:
|
1237
|
+
return f"'num' must be in [0, {self.total - 1}]; got {self.num}"
|
1238
|
+
|
1239
|
+
|
1240
|
+
##
|
1241
|
+
|
1242
|
+
|
1193
1243
|
@overload
|
1194
1244
|
def reduce_mappings(
|
1195
1245
|
func: Callable[[_V, _V], _V], sequence: Iterable[Mapping[_K, _V]], /
|
@@ -1458,6 +1508,7 @@ __all__ = [
|
|
1458
1508
|
"OneUniqueEmptyError",
|
1459
1509
|
"OneUniqueError",
|
1460
1510
|
"OneUniqueNonUniqueError",
|
1511
|
+
"RangePartitionsError",
|
1461
1512
|
"ResolveIncludeAndExcludeError",
|
1462
1513
|
"SortIterableError",
|
1463
1514
|
"always_iterable",
|
@@ -1502,6 +1553,7 @@ __all__ = [
|
|
1502
1553
|
"one_unique",
|
1503
1554
|
"pairwise_tail",
|
1504
1555
|
"product_dicts",
|
1556
|
+
"range_partitions",
|
1505
1557
|
"reduce_mappings",
|
1506
1558
|
"resolve_include_and_exclude",
|
1507
1559
|
"sort_iterable",
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/modules/package_missing/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/modules/package_missing/module.py
RENAMED
File without changes
|
{dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/modules/package_with/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/modules/package_with/outer_1.py
RENAMED
File without changes
|
{dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/modules/package_with/outer_2.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/modules/package_without/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/modules/package_without/module_1.py
RENAMED
File without changes
|
{dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/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
|
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.125.9 → dycw_utilities-0.125.10}/src/tests/test_traceback_funcs/__init__.py
RENAMED
File without changes
|
File without changes
|
{dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_traceback_funcs/decorated_async.py
RENAMED
File without changes
|
{dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_traceback_funcs/decorated_sync.py
RENAMED
File without changes
|
{dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_traceback_funcs/error_bind.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_traceback_funcs/recursive.py
RENAMED
File without changes
|
{dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_traceback_funcs/task_group_one.py
RENAMED
File without changes
|
{dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_traceback_funcs/task_group_two.py
RENAMED
File without changes
|
File without changes
|
{dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/src/tests/test_traceback_funcs/untraced.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.125.9 → dycw_utilities-0.125.10}/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
|
File without changes
|