dycw-utilities 0.138.10__tar.gz → 0.138.12__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.138.10 → dycw_utilities-0.138.12}/PKG-INFO +2 -2
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/pyproject.toml +4 -4
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_polars.py +27 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_whenever.py +30 -1
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/__init__.py +1 -1
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/polars.py +21 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/whenever.py +38 -3
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/.gitignore +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/LICENSE +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/README.md +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/__init__.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/conftest.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/modules/__init__.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/modules/package_missing/__init__.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/modules/package_missing/module.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/modules/package_with/__init__.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/modules/package_with/outer_1.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/modules/package_with/outer_2.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/modules/package_without/__init__.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/modules/package_without/module_1.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/modules/package_without/module_2.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/modules/standalone.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/modules/with_imports.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_aiolimiter.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_altair.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_asyncio.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_asyncio_classes/__init__.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_asyncio_classes/loopers.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_asyncio_classes/redis.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_atomicwrites.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_atools.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_cachetools.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_click.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_concurrent.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_contextlib.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_contextvars.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_cryptography.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_cvxpy.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_dataclasses.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_enum.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_errors.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_eventkit.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_fastapi.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_fpdf2.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_functions.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_functools.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_getpass.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_hashlib.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_http.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_hypothesis.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_importlib.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_inflect.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_ipython.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_iterables.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_jupyter.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_libcst.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_lightweight_charts.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_logging.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_luigi.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_math.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_memory_profiler.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_modules.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_more_itertools.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_numpy.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_objects/__init__.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_objects/objects.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_operator.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_optuna.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_orjson.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_os.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_parse.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_pathlib.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_period.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_pickle.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_platform.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_polars_ols.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_pottery.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_pqdm.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_psutil.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_pydantic.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_pyinstrument.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_pytest.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_pytest_regressions.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_python_dotenv.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_random.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_re.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_redis.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_reprlib.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_scipy.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_sentinel.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_shelve.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_slack_sdk.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_socket.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_sqlalchemy.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_statsmodels.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_streamlit.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_string.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_tempfile.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_text.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_threading.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_timer.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_traceback.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_typed_settings.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_types.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_typing.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_typing_funcs/__init__.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_typing_funcs/no_future.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_typing_funcs/with_future.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_tzdata.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_tzlocal.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_uuid.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_version.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_warnings.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_zipfile.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_zoneinfo.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/aiolimiter.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/altair.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/asyncio.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/atomicwrites.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/atools.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/cachetools.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/click.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/concurrent.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/contextlib.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/contextvars.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/cryptography.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/cvxpy.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/dataclasses.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/enum.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/errors.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/eventkit.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/fastapi.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/fpdf2.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/functions.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/functools.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/getpass.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/hashlib.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/http.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/hypothesis.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/importlib.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/inflect.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/ipython.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/iterables.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/jupyter.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/libcst.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/lightweight_charts.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/logging.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/luigi.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/math.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/memory_profiler.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/modules.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/more_itertools.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/numpy.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/operator.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/optuna.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/orjson.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/os.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/parse.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/pathlib.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/period.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/pickle.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/platform.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/polars_ols.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/pottery.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/pqdm.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/psutil.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/py.typed +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/pydantic.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/pyinstrument.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/pytest.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/pytest_regressions.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/pytest_regressions_plugin.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/python_dotenv.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/random.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/re.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/redis.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/reprlib.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/scipy.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/sentinel.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/shelve.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/slack_sdk.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/socket.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/sqlalchemy.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/statsmodels.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/streamlit.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/string.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/tempfile.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/text.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/threading.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/timer.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/traceback.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/typed_settings.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/types.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/typing.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/tzdata.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/tzlocal.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/uuid.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/version.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/warnings.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/zipfile.py +0 -0
- {dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/zoneinfo.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: dycw-utilities
|
3
|
-
Version: 0.138.
|
3
|
+
Version: 0.138.12
|
4
4
|
Author-email: Derek Wan <d.wan@icloud.com>
|
5
5
|
License-File: LICENSE
|
6
6
|
Requires-Python: >=3.12
|
@@ -12,7 +12,7 @@ Provides-Extra: logging
|
|
12
12
|
Requires-Dist: coloredlogs<15.1,>=15.0.1; extra == 'logging'
|
13
13
|
Provides-Extra: test
|
14
14
|
Requires-Dist: dycw-pytest-only<2.2,>=2.1.1; extra == 'test'
|
15
|
-
Requires-Dist: hypothesis<6.136,>=6.135.
|
15
|
+
Requires-Dist: hypothesis<6.136,>=6.135.16; extra == 'test'
|
16
16
|
Requires-Dist: pudb<2025.2,>=2025.1; extra == 'test'
|
17
17
|
Requires-Dist: pytest-asyncio<1.1,>=1.0.0; extra == 'test'
|
18
18
|
Requires-Dist: pytest-cov<6.2,>=6.1.1; extra == 'test'
|
@@ -41,7 +41,7 @@ fastapi-test = ["httpx", "uvicorn"]
|
|
41
41
|
fpdf2 = ["fpdf2 >= 2.8.3, < 2.9"]
|
42
42
|
hashlib-test = ["orjson"]
|
43
43
|
http-test = ["orjson"]
|
44
|
-
hypothesis = ["hypothesis >= 6.135.
|
44
|
+
hypothesis = ["hypothesis >= 6.135.16, < 6.136"]
|
45
45
|
hypothesis-test = ["libcst", "luigi", "pathvalidate", "numpy", "pytest-rerunfailures"]
|
46
46
|
inflect = ["inflect >= 7.5.0, < 7.6"]
|
47
47
|
jupyter-test = ["pandas", "polars"]
|
@@ -106,7 +106,7 @@ dependencies = [
|
|
106
106
|
name = "dycw-utilities"
|
107
107
|
readme = "README.md"
|
108
108
|
requires-python = ">= 3.12"
|
109
|
-
version = "0.138.
|
109
|
+
version = "0.138.12"
|
110
110
|
|
111
111
|
[project.entry-points.pytest11]
|
112
112
|
pytest-regressions = "utilities.pytest_regressions_plugin"
|
@@ -117,7 +117,7 @@ logging = [
|
|
117
117
|
]
|
118
118
|
test = [
|
119
119
|
"dycw-pytest-only >= 2.1.1, < 2.2",
|
120
|
-
"hypothesis >= 6.135.
|
120
|
+
"hypothesis >= 6.135.16, < 6.136",
|
121
121
|
"pudb >= 2025.1, < 2025.2",
|
122
122
|
"pytest >= 8.3.5, < 8.4",
|
123
123
|
"pytest-asyncio >= 1.0.0, < 1.1",
|
@@ -137,7 +137,7 @@ test = [
|
|
137
137
|
# bump-my-version
|
138
138
|
[tool.bumpversion]
|
139
139
|
allow_dirty = true
|
140
|
-
current_version = "0.138.
|
140
|
+
current_version = "0.138.12"
|
141
141
|
|
142
142
|
[[tool.bumpversion.files]]
|
143
143
|
filename = "src/utilities/__init__.py"
|
@@ -153,6 +153,7 @@ from utilities.polars import (
|
|
153
153
|
nan_sum_agg,
|
154
154
|
nan_sum_cols,
|
155
155
|
normal,
|
156
|
+
order_of_magnitude,
|
156
157
|
reify_exprs,
|
157
158
|
replace_time_zone,
|
158
159
|
set_first_row_as_columns,
|
@@ -1990,6 +1991,32 @@ class TestNormal:
|
|
1990
1991
|
assert series.is_finite().all()
|
1991
1992
|
|
1992
1993
|
|
1994
|
+
class TestOrderOfMagnitude:
|
1995
|
+
@given(
|
1996
|
+
sign=sampled_from([1, -1]),
|
1997
|
+
case=sampled_from([
|
1998
|
+
(0.25, -0.60206, -1),
|
1999
|
+
(0.5, -0.30103, 0),
|
2000
|
+
(0.75, -0.1249387, 0),
|
2001
|
+
(1.0, 0.0, 0),
|
2002
|
+
(5.0, 0.69897, 1),
|
2003
|
+
(10.0, 1.0, 1),
|
2004
|
+
(50.0, 1.69897, 2),
|
2005
|
+
(100.0, 2.0, 2),
|
2006
|
+
]),
|
2007
|
+
)
|
2008
|
+
def test_main(self, *, sign: int, case: tuple[float, float, int]) -> None:
|
2009
|
+
x, exp_float, exp_int = case
|
2010
|
+
x_use = Series(values=[sign * x])
|
2011
|
+
res_float = order_of_magnitude(x_use)
|
2012
|
+
assert res_float.dtype == Float64
|
2013
|
+
assert_series_equal(res_float, Series([exp_float]))
|
2014
|
+
res_int = order_of_magnitude(x_use, round_=True)
|
2015
|
+
assert res_int.dtype == Int64
|
2016
|
+
assert_series_equal(res_int, Series([exp_int]))
|
2017
|
+
assert (res_int == exp_int).all()
|
2018
|
+
|
2019
|
+
|
1993
2020
|
class TestReifyExprs:
|
1994
2021
|
@given(length=hypothesis.strategies.integers(0, 10), name=text_ascii())
|
1995
2022
|
def test_one_expr(self, *, length: int, name: str) -> None:
|
@@ -1,5 +1,6 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
|
3
|
+
import datetime as dt
|
3
4
|
from dataclasses import dataclass, field
|
4
5
|
from logging import DEBUG
|
5
6
|
from typing import TYPE_CHECKING, ClassVar, Self
|
@@ -7,7 +8,7 @@ from zoneinfo import ZoneInfo
|
|
7
8
|
|
8
9
|
from hypothesis import given
|
9
10
|
from hypothesis.strategies import integers, none, sampled_from, timezones
|
10
|
-
from pytest import raises
|
11
|
+
from pytest import mark, param, raises
|
11
12
|
from whenever import (
|
12
13
|
Date,
|
13
14
|
DateDelta,
|
@@ -64,6 +65,7 @@ from utilities.whenever import (
|
|
64
65
|
MinMaxDateError,
|
65
66
|
ToDaysError,
|
66
67
|
ToNanosError,
|
68
|
+
ToPyTimeDeltaError,
|
67
69
|
WheneverLogRecord,
|
68
70
|
_FreqDayIncrementError,
|
69
71
|
_FreqIncrementError,
|
@@ -87,6 +89,7 @@ from utilities.whenever import (
|
|
87
89
|
to_days,
|
88
90
|
to_local_plain,
|
89
91
|
to_nanos,
|
92
|
+
to_py_time_delta,
|
90
93
|
to_time_delta,
|
91
94
|
to_zoned_date_time,
|
92
95
|
two_digit_year_month,
|
@@ -520,6 +523,32 @@ class TestToLocalPlain:
|
|
520
523
|
assert isinstance(result, PlainDateTime)
|
521
524
|
|
522
525
|
|
526
|
+
class TestToPyTimeDelta:
|
527
|
+
@mark.parametrize(
|
528
|
+
("delta", "expected"),
|
529
|
+
[
|
530
|
+
param(DateDelta(days=1), dt.timedelta(days=1)),
|
531
|
+
param(TimeDelta(microseconds=1), dt.timedelta(microseconds=1)),
|
532
|
+
param(
|
533
|
+
DateTimeDelta(days=1, microseconds=1),
|
534
|
+
dt.timedelta(days=1, microseconds=1),
|
535
|
+
),
|
536
|
+
],
|
537
|
+
)
|
538
|
+
def test_main(
|
539
|
+
self, *, delta: DateDelta | TimeDelta | DateTimeDelta, expected: dt.timedelta
|
540
|
+
) -> None:
|
541
|
+
result = to_py_time_delta(delta)
|
542
|
+
assert result == expected
|
543
|
+
|
544
|
+
def test_error(self) -> None:
|
545
|
+
delta = TimeDelta(nanoseconds=1)
|
546
|
+
with raises(
|
547
|
+
ToPyTimeDeltaError, match="Time delta must not contain nanoseconds; got 1"
|
548
|
+
):
|
549
|
+
_ = to_py_time_delta(delta)
|
550
|
+
|
551
|
+
|
523
552
|
class TestToZonedDateTime:
|
524
553
|
@given(date_time=zoned_datetimes())
|
525
554
|
def test_date_time(self, *, date_time: ZonedDateTime) -> None:
|
@@ -1833,6 +1833,26 @@ def normal(
|
|
1833
1833
|
##
|
1834
1834
|
|
1835
1835
|
|
1836
|
+
@overload
|
1837
|
+
def order_of_magnitude(column: ExprLike, /, *, round_: bool = False) -> Expr: ...
|
1838
|
+
@overload
|
1839
|
+
def order_of_magnitude(column: Series, /, *, round_: bool = False) -> Series: ...
|
1840
|
+
@overload
|
1841
|
+
def order_of_magnitude(
|
1842
|
+
column: IntoExprColumn, /, *, round_: bool = False
|
1843
|
+
) -> Expr | Series: ...
|
1844
|
+
def order_of_magnitude(
|
1845
|
+
column: IntoExprColumn, /, *, round_: bool = False
|
1846
|
+
) -> Expr | Series:
|
1847
|
+
"""Compute the order of magnitude of a column."""
|
1848
|
+
column = ensure_expr_or_series(column)
|
1849
|
+
result = column.abs().log10()
|
1850
|
+
return result.round().cast(Int64) if round_ else result
|
1851
|
+
|
1852
|
+
|
1853
|
+
##
|
1854
|
+
|
1855
|
+
|
1836
1856
|
def reify_exprs(
|
1837
1857
|
*exprs: IntoExprColumn, **named_exprs: IntoExprColumn
|
1838
1858
|
) -> Expr | Series | DataFrame:
|
@@ -2184,6 +2204,7 @@ __all__ = [
|
|
2184
2204
|
"nan_sum_agg",
|
2185
2205
|
"nan_sum_cols",
|
2186
2206
|
"normal",
|
2207
|
+
"order_of_magnitude",
|
2187
2208
|
"replace_time_zone",
|
2188
2209
|
"set_first_row_as_columns",
|
2189
2210
|
"struct_dtype",
|
@@ -1,5 +1,6 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
|
3
|
+
import datetime as dt
|
3
4
|
from collections.abc import Callable, Iterable, Mapping
|
4
5
|
from dataclasses import dataclass
|
5
6
|
from functools import cache
|
@@ -553,9 +554,10 @@ def to_local_plain(date_time: ZonedDateTime, /) -> PlainDateTime:
|
|
553
554
|
|
554
555
|
def to_nanos(delta: DateTimeDelta, /) -> int:
|
555
556
|
"""Compute the number of nanoseconds in a date-time delta."""
|
556
|
-
|
557
|
-
|
558
|
-
|
557
|
+
try:
|
558
|
+
days = to_days(delta.date_part())
|
559
|
+
except ToDaysError as error:
|
560
|
+
raise ToNanosError(months=error.months) from None
|
559
561
|
return 24 * 60 * 60 * int(1e9) * days + delta.time_part().in_nanoseconds()
|
560
562
|
|
561
563
|
|
@@ -571,6 +573,37 @@ class ToNanosError(Exception):
|
|
571
573
|
##
|
572
574
|
|
573
575
|
|
576
|
+
def to_py_time_delta(delta: DateDelta | TimeDelta | DateTimeDelta, /) -> dt.timedelta:
|
577
|
+
"""Try convert a DateDelta to a standard library timedelta."""
|
578
|
+
match delta:
|
579
|
+
case DateDelta():
|
580
|
+
return dt.timedelta(days=to_days(delta))
|
581
|
+
case TimeDelta():
|
582
|
+
nanos = delta.in_nanoseconds()
|
583
|
+
micros, remainder = divmod(nanos, 1000)
|
584
|
+
if remainder != 0:
|
585
|
+
raise ToPyTimeDeltaError(nanoseconds=remainder)
|
586
|
+
return dt.timedelta(microseconds=micros)
|
587
|
+
case DateTimeDelta():
|
588
|
+
return to_py_time_delta(delta.date_part()) + to_py_time_delta(
|
589
|
+
delta.time_part()
|
590
|
+
)
|
591
|
+
case _ as never:
|
592
|
+
assert_never(never)
|
593
|
+
|
594
|
+
|
595
|
+
@dataclass(kw_only=True, slots=True)
|
596
|
+
class ToPyTimeDeltaError(Exception):
|
597
|
+
nanoseconds: int
|
598
|
+
|
599
|
+
@override
|
600
|
+
def __str__(self) -> str:
|
601
|
+
return f"Time delta must not contain nanoseconds; got {self.nanoseconds}"
|
602
|
+
|
603
|
+
|
604
|
+
##
|
605
|
+
|
606
|
+
|
574
607
|
def to_time_delta(nanos: int, /) -> TimeDelta:
|
575
608
|
"""Construct a time delta."""
|
576
609
|
components = _to_time_delta_components(nanos)
|
@@ -769,6 +802,7 @@ __all__ = [
|
|
769
802
|
"MinMaxDateError",
|
770
803
|
"ToDaysError",
|
771
804
|
"ToNanosError",
|
805
|
+
"ToPyTimeDeltaError",
|
772
806
|
"WheneverLogRecord",
|
773
807
|
"datetime_utc",
|
774
808
|
"format_compact",
|
@@ -786,6 +820,7 @@ __all__ = [
|
|
786
820
|
"to_days",
|
787
821
|
"to_local_plain",
|
788
822
|
"to_nanos",
|
823
|
+
"to_py_time_delta",
|
789
824
|
"to_zoned_date_time",
|
790
825
|
"two_digit_year_month",
|
791
826
|
]
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/modules/package_missing/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/modules/package_missing/module.py
RENAMED
File without changes
|
{dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/modules/package_with/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/modules/package_with/outer_1.py
RENAMED
File without changes
|
{dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/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.138.10 → dycw_utilities-0.138.12}/src/tests/modules/package_without/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/modules/package_without/module_1.py
RENAMED
File without changes
|
{dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/modules/package_without/module_2.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_asyncio_classes/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_asyncio_classes/loopers.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
|
{dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/tests/test_typing_funcs/no_future.py
RENAMED
File without changes
|
{dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/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
|
{dycw_utilities-0.138.10 → dycw_utilities-0.138.12}/src/utilities/pytest_regressions_plugin.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
|