dycw-utilities 0.159.4__tar.gz → 0.159.6__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.159.4 → dycw_utilities-0.159.6}/PKG-INFO +1 -1
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/pyproject.toml +2 -2
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_polars.py +31 -7
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_timer.py +5 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_whenever.py +4 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/__init__.py +1 -1
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/click.py +1 -4
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/polars.py +89 -14
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/.gitignore +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/LICENSE +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/README.md +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/__init__.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/conftest.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/modules/__init__.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/modules/package_missing/__init__.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/modules/package_missing/module.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/modules/package_with/__init__.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/modules/package_with/outer_1.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/modules/package_with/outer_2.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/modules/package_without/__init__.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/modules/package_without/module_1.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/modules/package_without/module_2.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/modules/standalone.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/modules/with_imports.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_altair.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_asyncio.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_atomicwrites.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_atools.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_cachetools.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_click.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_concurrent.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_contextlib.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_contextvars.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_cryptography.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_cvxpy.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_dataclasses.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_enum.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_errors.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_eventkit.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_fastapi.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_fpdf2.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_functions.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_functools.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_getpass.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_gzip.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_hashlib.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_http.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_hypothesis.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_importlib.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_inflect.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_ipython.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_iterables.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_json.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_jupyter.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_libcst.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_lightweight_charts.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_logging.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_math.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_memory_profiler.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_modules.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_more_itertools.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_numpy.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_objects/__init__.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_objects/objects.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_operator.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_optuna.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_orjson.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_os.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_parse.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_pathlib.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_pickle.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_platform.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_polars_ols.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_postgres.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_pottery.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_pqdm.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_psutil.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_pyinstrument.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_pytest.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_pytest_randomly.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_pytest_regressions.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_random.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_re.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_redis.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_reprlib.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_scipy.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_sentinel.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_shelve.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_slack_sdk.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_socket.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_sqlalchemy.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_statsmodels.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_string.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_tempfile.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_text.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_threading.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_traceback.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_typed_settings.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_types.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_typing.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_typing_funcs/__init__.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_typing_funcs/no_future.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_typing_funcs/with_future.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_tzdata.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_tzlocal.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_uuid.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_version.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_warnings.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_zipfile.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/test_zoneinfo.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/altair.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/asyncio.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/atomicwrites.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/atools.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/cachetools.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/concurrent.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/contextlib.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/contextvars.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/cryptography.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/cvxpy.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/dataclasses.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/enum.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/errors.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/eventkit.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/fastapi.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/fpdf2.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/functions.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/functools.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/getpass.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/gzip.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/hashlib.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/http.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/hypothesis.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/importlib.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/inflect.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/ipython.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/iterables.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/json.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/jupyter.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/libcst.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/lightweight_charts.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/logging.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/math.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/memory_profiler.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/modules.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/more_itertools.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/numpy.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/operator.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/optuna.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/orjson.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/os.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/parse.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/pathlib.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/pickle.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/platform.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/polars_ols.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/postgres.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/pottery.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/pqdm.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/psutil.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/py.typed +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/pyinstrument.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/pytest.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/pytest_plugins/__init__.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/pytest_plugins/pytest_randomly.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/pytest_plugins/pytest_regressions.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/pytest_regressions.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/random.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/re.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/redis.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/reprlib.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/scipy.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/sentinel.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/shelve.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/slack_sdk.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/socket.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/sqlalchemy.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/statsmodels.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/string.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/tempfile.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/text.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/threading.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/timer.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/traceback.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/typed_settings.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/types.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/typing.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/tzdata.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/tzlocal.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/uuid.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/version.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/warnings.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/whenever.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/zipfile.py +0 -0
- {dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/zoneinfo.py +0 -0
@@ -227,7 +227,7 @@ dependencies = [
|
|
227
227
|
name = "dycw-utilities"
|
228
228
|
readme = "README.md"
|
229
229
|
requires-python = ">= 3.12"
|
230
|
-
version = "0.159.
|
230
|
+
version = "0.159.6"
|
231
231
|
|
232
232
|
[project.entry-points.pytest11]
|
233
233
|
pytest-randomly = "utilities.pytest_plugins.pytest_randomly"
|
@@ -259,7 +259,7 @@ test = [
|
|
259
259
|
# bump-my-version
|
260
260
|
[tool.bumpversion]
|
261
261
|
allow_dirty = true
|
262
|
-
current_version = "0.159.
|
262
|
+
current_version = "0.159.6"
|
263
263
|
|
264
264
|
[[tool.bumpversion.files]]
|
265
265
|
filename = "src/utilities/__init__.py"
|
@@ -9,7 +9,7 @@ from enum import auto
|
|
9
9
|
from itertools import chain, repeat
|
10
10
|
from math import isfinite, nan
|
11
11
|
from random import Random
|
12
|
-
from typing import TYPE_CHECKING, Any, ClassVar, Literal, assert_never
|
12
|
+
from typing import TYPE_CHECKING, Any, ClassVar, Literal, assert_never, cast
|
13
13
|
from uuid import UUID, uuid4
|
14
14
|
|
15
15
|
import hypothesis.strategies
|
@@ -97,6 +97,7 @@ from utilities.polars import (
|
|
97
97
|
InsertBeforeError,
|
98
98
|
OneColumnEmptyError,
|
99
99
|
OneColumnNonUniqueError,
|
100
|
+
RoundToFloatError,
|
100
101
|
SetFirstRowAsColumnsError,
|
101
102
|
TimePeriodDType,
|
102
103
|
_check_polars_dataframe_predicates,
|
@@ -1560,7 +1561,7 @@ class TestFiniteEWMWeights:
|
|
1560
1561
|
|
1561
1562
|
class TestFirstTrueHorizontal:
|
1562
1563
|
@mark.parametrize(
|
1563
|
-
("
|
1564
|
+
("values", "expected"),
|
1564
1565
|
[
|
1565
1566
|
param([True, True, True], 0),
|
1566
1567
|
param([False, True, True], 1),
|
@@ -1568,9 +1569,9 @@ class TestFirstTrueHorizontal:
|
|
1568
1569
|
param([False, False, False], None),
|
1569
1570
|
],
|
1570
1571
|
)
|
1571
|
-
def test_main(self, *,
|
1572
|
-
|
1573
|
-
result = first_true_horizontal(
|
1572
|
+
def test_main(self, *, values: list[bool], expected: int | None) -> None:
|
1573
|
+
series = [Series(values=[v], dtype=Boolean) for v in values]
|
1574
|
+
result = first_true_horizontal(*series)
|
1574
1575
|
assert result.item() == expected
|
1575
1576
|
|
1576
1577
|
|
@@ -2427,8 +2428,8 @@ class TestReplaceTimeZone:
|
|
2427
2428
|
class TestRoundToFloat:
|
2428
2429
|
@mark.parametrize(("x", "y", "exp_value"), tests.test_math.TestRoundToFloat.cases)
|
2429
2430
|
def test_main(self, *, x: float, y: float, exp_value: float) -> None:
|
2430
|
-
|
2431
|
-
result = round_to_float(
|
2431
|
+
x_sr = Series(name="x", values=[x], dtype=Float64)
|
2432
|
+
result = round_to_float(x_sr, y)
|
2432
2433
|
expected = Series(name="x", values=[exp_value], dtype=Float64)
|
2433
2434
|
assert_series_equal(result, expected, check_exact=True)
|
2434
2435
|
|
@@ -2441,6 +2442,29 @@ class TestRoundToFloat:
|
|
2441
2442
|
expected = Series(name="x", values=[1.2], dtype=Float64).to_frame()
|
2442
2443
|
assert_frame_equal(df, expected)
|
2443
2444
|
|
2445
|
+
def test_series_and_expr(self) -> None:
|
2446
|
+
x = Series(name="x", values=[1.234], dtype=Float64)
|
2447
|
+
y = lit(0.1, dtype=Float64).alias("y")
|
2448
|
+
result = round_to_float(x, y)
|
2449
|
+
assert result.item() == 1.2
|
2450
|
+
|
2451
|
+
def test_expr_and_expr(self) -> None:
|
2452
|
+
x = lit(1.234, dtype=Float64).alias("x")
|
2453
|
+
y = Series(name="y", values=[0.1], dtype=Float64)
|
2454
|
+
result = round_to_float(x, y)
|
2455
|
+
assert result.item() == 1.2
|
2456
|
+
|
2457
|
+
@mark.parametrize(
|
2458
|
+
("x", "y"),
|
2459
|
+
[param("x", "y"), param(col.x, "y"), param("x", col.y), param(col.x, col.y)],
|
2460
|
+
)
|
2461
|
+
def test_error(self, *, x: IntoExprColumn, y: IntoExprColumn) -> None:
|
2462
|
+
with raises(
|
2463
|
+
RoundToFloatError,
|
2464
|
+
match="At least 1 of the dividend and/or divisor must be a Series; got .* and .*",
|
2465
|
+
):
|
2466
|
+
_ = round_to_float(cast("Any", x), cast("Any", y))
|
2467
|
+
|
2444
2468
|
|
2445
2469
|
class TestSerializeAndDeserializeDataFrame:
|
2446
2470
|
cases: ClassVar[list[tuple[PolarsDataType, SearchStrategy[Any]]]] = [
|
@@ -101,6 +101,11 @@ class TestTimer:
|
|
101
101
|
await sleep_td(2 * delta)
|
102
102
|
assert timer >= delta
|
103
103
|
|
104
|
+
def test_float(self) -> None:
|
105
|
+
with Timer() as timer:
|
106
|
+
...
|
107
|
+
assert float(timer) == timer.timedelta.in_seconds()
|
108
|
+
|
104
109
|
def test_hashable(self) -> None:
|
105
110
|
timer = Timer()
|
106
111
|
_ = hash(timer)
|
@@ -1398,6 +1398,10 @@ class TestToZonedDateTime:
|
|
1398
1398
|
def test_date_time(self, *, date_time: ZonedDateTime) -> None:
|
1399
1399
|
assert to_zoned_date_time(date_time) == date_time
|
1400
1400
|
|
1401
|
+
@given(date_time=zoned_date_times())
|
1402
|
+
def test_str(self, *, date_time: ZonedDateTime) -> None:
|
1403
|
+
assert to_zoned_date_time(date_time.format_common_iso()) == date_time
|
1404
|
+
|
1401
1405
|
@given(date_time=zoned_date_times_2000)
|
1402
1406
|
def test_py_date_time_zone_info(self, *, date_time: ZonedDateTime) -> None:
|
1403
1407
|
assert to_zoned_date_time(date_time.py_datetime()) == date_time
|
@@ -260,10 +260,7 @@ class Path(ParamType):
|
|
260
260
|
case pathlib.Path():
|
261
261
|
return value.expanduser()
|
262
262
|
case str():
|
263
|
-
|
264
|
-
return pathlib.Path(value).expanduser()
|
265
|
-
except ValueError as error:
|
266
|
-
self.fail(str(error), param, ctx)
|
263
|
+
return pathlib.Path(value).expanduser()
|
267
264
|
case never:
|
268
265
|
assert_never(never)
|
269
266
|
|
@@ -57,6 +57,7 @@ import utilities.math
|
|
57
57
|
from utilities.dataclasses import yield_fields
|
58
58
|
from utilities.errors import ImpossibleCaseError
|
59
59
|
from utilities.functions import (
|
60
|
+
get_class_name,
|
60
61
|
is_dataclass_class,
|
61
62
|
is_dataclass_instance,
|
62
63
|
make_isinstance,
|
@@ -1324,10 +1325,27 @@ class _FiniteEWMWeightsError(Exception):
|
|
1324
1325
|
##
|
1325
1326
|
|
1326
1327
|
|
1327
|
-
|
1328
|
+
@overload
|
1329
|
+
def first_true_horizontal(column: Series, /) -> Series: ...
|
1330
|
+
@overload
|
1331
|
+
def first_true_horizontal(column1: Series, column2: Series, /) -> Series: ...
|
1332
|
+
@overload
|
1333
|
+
def first_true_horizontal(
|
1334
|
+
column1: Series, column2: Series, column3: Series, /
|
1335
|
+
) -> Series: ...
|
1336
|
+
@overload
|
1337
|
+
def first_true_horizontal(
|
1338
|
+
column1: Series, column2: Series, column3: Series, column4: Series, /
|
1339
|
+
) -> Series: ...
|
1340
|
+
@overload
|
1341
|
+
def first_true_horizontal(*columns: Series) -> Series: ...
|
1342
|
+
@overload
|
1343
|
+
def first_true_horizontal(*columns: IntoExprColumn) -> ExprOrSeries: ...
|
1344
|
+
def first_true_horizontal(*columns: IntoExprColumn) -> ExprOrSeries:
|
1328
1345
|
"""Get the index of the first true in each row."""
|
1329
|
-
|
1330
|
-
|
1346
|
+
columns2 = ensure_expr_or_series_many(*columns)
|
1347
|
+
expr = when(any_horizontal(*columns2)).then(concat_list(*columns2).list.arg_max())
|
1348
|
+
return try_reify_expr(expr, *columns2)
|
1331
1349
|
|
1332
1350
|
|
1333
1351
|
##
|
@@ -1972,19 +1990,31 @@ def normal(
|
|
1972
1990
|
##
|
1973
1991
|
|
1974
1992
|
|
1993
|
+
@overload
|
1994
|
+
def number_of_decimals(
|
1995
|
+
series: ExprLike, /, *, max_decimals: int = MAX_DECIMALS
|
1996
|
+
) -> Expr: ...
|
1997
|
+
@overload
|
1975
1998
|
def number_of_decimals(
|
1976
1999
|
series: Series, /, *, max_decimals: int = MAX_DECIMALS
|
1977
|
-
) -> Series:
|
2000
|
+
) -> Series: ...
|
2001
|
+
@overload
|
2002
|
+
def number_of_decimals(
|
2003
|
+
series: IntoExprColumn, /, *, max_decimals: int = MAX_DECIMALS
|
2004
|
+
) -> ExprOrSeries: ...
|
2005
|
+
def number_of_decimals(
|
2006
|
+
series: IntoExprColumn, /, *, max_decimals: int = MAX_DECIMALS
|
2007
|
+
) -> ExprOrSeries:
|
1978
2008
|
"""Get the number of decimals."""
|
2009
|
+
series = ensure_expr_or_series(series)
|
1979
2010
|
frac = series - series.floor()
|
1980
|
-
results =
|
2011
|
+
results = (
|
1981
2012
|
_number_of_decimals_check_scale(frac, s) for s in range(max_decimals + 1)
|
1982
|
-
|
1983
|
-
|
1984
|
-
return first_true_horizontal(df_results)
|
2013
|
+
)
|
2014
|
+
return first_true_horizontal(*results)
|
1985
2015
|
|
1986
2016
|
|
1987
|
-
def _number_of_decimals_check_scale(frac:
|
2017
|
+
def _number_of_decimals_check_scale(frac: ExprOrSeries, scale: int, /) -> ExprOrSeries:
|
1988
2018
|
scaled = 10**scale * frac
|
1989
2019
|
return is_close(scaled, scaled.round()).alias(str(scale))
|
1990
2020
|
|
@@ -2346,19 +2376,63 @@ def round_to_float(
|
|
2346
2376
|
) -> Expr: ...
|
2347
2377
|
@overload
|
2348
2378
|
def round_to_float(
|
2349
|
-
x: Series, y: float, /, *, mode: RoundMode = "half_to_even"
|
2379
|
+
x: Series, y: float | ExprOrSeries, /, *, mode: RoundMode = "half_to_even"
|
2380
|
+
) -> Series: ...
|
2381
|
+
@overload
|
2382
|
+
def round_to_float(
|
2383
|
+
x: ExprLike, y: Series, /, *, mode: RoundMode = "half_to_even"
|
2350
2384
|
) -> Series: ...
|
2351
2385
|
@overload
|
2352
2386
|
def round_to_float(
|
2353
|
-
x:
|
2387
|
+
x: ExprLike, y: Expr, /, *, mode: RoundMode = "half_to_even"
|
2388
|
+
) -> Expr: ...
|
2389
|
+
@overload
|
2390
|
+
def round_to_float(
|
2391
|
+
x: IntoExprColumn, y: float | Series, /, *, mode: RoundMode = "half_to_even"
|
2354
2392
|
) -> ExprOrSeries: ...
|
2355
2393
|
def round_to_float(
|
2356
|
-
x: IntoExprColumn, y: float, /, *, mode: RoundMode = "half_to_even"
|
2394
|
+
x: IntoExprColumn, y: float | IntoExprColumn, /, *, mode: RoundMode = "half_to_even"
|
2357
2395
|
) -> ExprOrSeries:
|
2358
2396
|
"""Round a column to the nearest multiple of another float."""
|
2359
2397
|
x = ensure_expr_or_series(x)
|
2360
|
-
|
2361
|
-
|
2398
|
+
y = y if isinstance(y, int | float) else ensure_expr_or_series(y)
|
2399
|
+
match x, y:
|
2400
|
+
case Expr() | Series(), int() | float():
|
2401
|
+
z = (x / y).round(mode=mode) * y
|
2402
|
+
return z.round(decimals=utilities.math.number_of_decimals(y) + 1)
|
2403
|
+
case Series(), Expr() | Series():
|
2404
|
+
df = (
|
2405
|
+
x.to_frame()
|
2406
|
+
.with_columns(y)
|
2407
|
+
.with_columns(number_of_decimals(y).alias("_decimals"))
|
2408
|
+
.with_row_index(name="_index")
|
2409
|
+
.group_by("_decimals")
|
2410
|
+
.map_groups(_round_to_float_one)
|
2411
|
+
.sort("_index")
|
2412
|
+
)
|
2413
|
+
return df[df.columns[1]]
|
2414
|
+
case Expr(), Series():
|
2415
|
+
df = y.to_frame().with_columns(x)
|
2416
|
+
return round_to_float(df[df.columns[1]], df[df.columns[0]], mode=mode)
|
2417
|
+
case Expr(), Expr() | str():
|
2418
|
+
raise RoundToFloatError(x=x, y=y)
|
2419
|
+
case never:
|
2420
|
+
assert_never(never)
|
2421
|
+
|
2422
|
+
|
2423
|
+
def _round_to_float_one(df: DataFrame, /) -> DataFrame:
|
2424
|
+
decimals: int = df["_decimals"].unique().item()
|
2425
|
+
return df.with_columns(col(df.columns[1]).round(decimals=decimals))
|
2426
|
+
|
2427
|
+
|
2428
|
+
@dataclass(kw_only=True, slots=True)
|
2429
|
+
class RoundToFloatError(Exception):
|
2430
|
+
x: IntoExprColumn
|
2431
|
+
y: IntoExprColumn
|
2432
|
+
|
2433
|
+
@override
|
2434
|
+
def __str__(self) -> str:
|
2435
|
+
return f"At least 1 of the dividend and/or divisor must be a Series; got {get_class_name(self.x)!r} and {get_class_name(self.y)!r}"
|
2362
2436
|
|
2363
2437
|
|
2364
2438
|
##
|
@@ -2571,6 +2645,7 @@ __all__ = [
|
|
2571
2645
|
"OneColumnEmptyError",
|
2572
2646
|
"OneColumnError",
|
2573
2647
|
"OneColumnNonUniqueError",
|
2648
|
+
"RoundToFloatError",
|
2574
2649
|
"SetFirstRowAsColumnsError",
|
2575
2650
|
"TimePeriodDType",
|
2576
2651
|
"acf",
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/modules/package_missing/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/modules/package_missing/module.py
RENAMED
File without changes
|
{dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/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.159.4 → dycw_utilities-0.159.6}/src/tests/modules/package_without/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/tests/modules/package_without/module_1.py
RENAMED
File without changes
|
{dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/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
|
File without changes
|
File without changes
|
{dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/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
|
{dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/pytest_plugins/pytest_randomly.py
RENAMED
File without changes
|
{dycw_utilities-0.159.4 → dycw_utilities-0.159.6}/src/utilities/pytest_plugins/pytest_regressions.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
|