dycw-utilities 0.165.2__tar.gz → 0.165.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/PKG-INFO +1 -1
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/pyproject.toml +2 -2
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_polars.py +90 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/__init__.py +1 -1
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/polars.py +30 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/.gitignore +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/LICENSE +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/README.md +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/__init__.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/conftest.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/modules/__init__.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/modules/package_missing/__init__.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/modules/package_missing/module.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/modules/package_with/__init__.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/modules/package_with/outer_1.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/modules/package_with/outer_2.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/modules/package_without/__init__.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/modules/package_without/module_1.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/modules/package_without/module_2.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/modules/standalone.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/modules/with_imports.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_aeventkit.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_altair.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_asyncio.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_atomicwrites.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_atools.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_cachetools.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_click.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_concurrent.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_contextlib.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_contextvars.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_cryptography.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_cvxpy.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_dataclasses.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_enum.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_errors.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_fastapi.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_fpdf2.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_functions.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_functools.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_getpass.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_gzip.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_hashlib.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_http.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_hypothesis.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_importlib.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_inflect.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_ipython.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_iterables.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_json.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_jupyter.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_libcst.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_lightweight_charts.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_logging.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_math.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_memory_profiler.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_modules.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_more_itertools.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_numpy.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_objects/__init__.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_objects/objects.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_operator.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_optuna.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_orjson.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_os.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_parse.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_pathlib.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_pickle.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_platform.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_polars_ols.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_postgres.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_pottery.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_pqdm.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_psutil.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_pyinstrument.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_pytest.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_pytest_randomly.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_pytest_regressions.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_random.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_re.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_redis.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_reprlib.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_scipy.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_sentinel.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_shelve.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_slack_sdk.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_socket.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_sqlalchemy.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_statsmodels.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_string.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_tempfile.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_testbook.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_text.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_threading.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_timer.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_traceback.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_typed_settings.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_types.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_typing.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_typing_funcs/__init__.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_typing_funcs/no_future.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_typing_funcs/with_future.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_tzdata.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_tzlocal.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_uuid.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_version.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_warnings.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_whenever.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_zipfile.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/test_zoneinfo.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/aeventkit.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/altair.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/asyncio.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/atomicwrites.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/atools.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/cachetools.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/click.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/concurrent.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/contextlib.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/contextvars.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/cryptography.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/cvxpy.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/dataclasses.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/enum.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/errors.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/fastapi.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/fpdf2.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/functions.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/functools.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/getpass.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/gzip.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/hashlib.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/http.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/hypothesis.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/importlib.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/inflect.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/ipython.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/iterables.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/json.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/jupyter.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/libcst.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/lightweight_charts.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/logging.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/math.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/memory_profiler.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/modules.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/more_itertools.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/numpy.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/operator.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/optuna.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/orjson.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/os.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/parse.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/pathlib.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/pickle.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/platform.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/polars_ols.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/postgres.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/pottery.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/pqdm.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/psutil.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/py.typed +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/pyinstrument.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/pytest.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/pytest_plugins/__init__.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/pytest_plugins/pytest_randomly.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/pytest_plugins/pytest_regressions.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/pytest_regressions.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/random.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/re.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/redis.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/reprlib.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/scipy.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/sentinel.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/shelve.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/slack_sdk.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/socket.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/sqlalchemy.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/statsmodels.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/string.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/tempfile.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/testbook.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/text.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/threading.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/timer.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/traceback.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/typed_settings.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/types.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/typing.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/tzdata.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/tzlocal.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/uuid.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/version.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/warnings.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/whenever.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/zipfile.py +0 -0
- {dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/utilities/zoneinfo.py +0 -0
@@ -233,7 +233,7 @@ dependencies = [
|
|
233
233
|
name = "dycw-utilities"
|
234
234
|
readme = "README.md"
|
235
235
|
requires-python = ">= 3.12"
|
236
|
-
version = "0.165.
|
236
|
+
version = "0.165.3"
|
237
237
|
|
238
238
|
[project.entry-points.pytest11]
|
239
239
|
pytest-randomly = "utilities.pytest_plugins.pytest_randomly"
|
@@ -266,7 +266,7 @@ test = [
|
|
266
266
|
# bump-my-version
|
267
267
|
[tool.bumpversion]
|
268
268
|
allow_dirty = true
|
269
|
-
current_version = "0.165.
|
269
|
+
current_version = "0.165.3"
|
270
270
|
|
271
271
|
[[tool.bumpversion.files]]
|
272
272
|
filename = "src/utilities/__init__.py"
|
@@ -194,6 +194,7 @@ from utilities.polars import (
|
|
194
194
|
reify_exprs,
|
195
195
|
replace_time_zone,
|
196
196
|
round_to_float,
|
197
|
+
search_period,
|
197
198
|
select_exact,
|
198
199
|
serialize_dataframe,
|
199
200
|
serialize_series,
|
@@ -224,6 +225,7 @@ from utilities.whenever import (
|
|
224
225
|
get_now,
|
225
226
|
get_now_plain,
|
226
227
|
get_today,
|
228
|
+
to_zoned_date_time,
|
227
229
|
)
|
228
230
|
from utilities.zoneinfo import UTC, to_time_zone_name
|
229
231
|
|
@@ -2474,6 +2476,94 @@ class TestRoundToFloat:
|
|
2474
2476
|
_ = round_to_float(cast("Any", x), cast("Any", y))
|
2475
2477
|
|
2476
2478
|
|
2479
|
+
class TestSearchPeriod:
|
2480
|
+
@mark.parametrize(
|
2481
|
+
("time", "exp_start", "exp_end"),
|
2482
|
+
[
|
2483
|
+
param(whenever.Time(8, 58), None, None),
|
2484
|
+
param(whenever.Time(8, 59), None, None),
|
2485
|
+
param(whenever.Time(9), 0, None),
|
2486
|
+
param(whenever.Time(9, 1), 0, 0),
|
2487
|
+
param(whenever.Time(9, 59), 0, 0),
|
2488
|
+
param(whenever.Time(10), 1, 0),
|
2489
|
+
param(whenever.Time(10, 1), 1, 1),
|
2490
|
+
param(whenever.Time(10, 59), 1, 1),
|
2491
|
+
param(whenever.Time(11), 2, 1),
|
2492
|
+
param(whenever.Time(11, 1), 2, 2),
|
2493
|
+
param(whenever.Time(11, 59), 2, 2),
|
2494
|
+
param(whenever.Time(12), None, 2),
|
2495
|
+
param(whenever.Time(12, 1), None, None),
|
2496
|
+
param(whenever.Time(12, 59), None, None),
|
2497
|
+
param(whenever.Time(13), 3, None),
|
2498
|
+
param(whenever.Time(13, 1), 3, 3),
|
2499
|
+
param(whenever.Time(13, 59), 3, 3),
|
2500
|
+
param(whenever.Time(14), None, 3),
|
2501
|
+
param(whenever.Time(14, 1), None, None),
|
2502
|
+
param(whenever.Time(14, 59), None, None),
|
2503
|
+
param(whenever.Time(15), 4, None),
|
2504
|
+
param(whenever.Time(15, 1), 4, 4),
|
2505
|
+
param(whenever.Time(15, 59), 4, 4),
|
2506
|
+
param(whenever.Time(16), None, 4),
|
2507
|
+
param(whenever.Time(16, 1), None, None),
|
2508
|
+
param(whenever.Time(16, 2), None, None),
|
2509
|
+
],
|
2510
|
+
)
|
2511
|
+
@mark.parametrize("start_or_end", [param("start"), param("end")])
|
2512
|
+
def test_main(
|
2513
|
+
self,
|
2514
|
+
*,
|
2515
|
+
time: whenever.Time,
|
2516
|
+
start_or_end: Literal["start", "end"],
|
2517
|
+
exp_start: int | None,
|
2518
|
+
exp_end: int | None,
|
2519
|
+
) -> None:
|
2520
|
+
date = whenever.Date(2000, 1, 1)
|
2521
|
+
sr = DataFrame(
|
2522
|
+
data=[
|
2523
|
+
(
|
2524
|
+
date.at(whenever.Time(s)).py_datetime(),
|
2525
|
+
date.at(whenever.Time(e)).py_datetime(),
|
2526
|
+
)
|
2527
|
+
for s, e in [(9, 10), (10, 11), (11, 12), (13, 14), (15, 16)]
|
2528
|
+
],
|
2529
|
+
schema={"start": DatetimeUTC, "end": DatetimeUTC},
|
2530
|
+
orient="row",
|
2531
|
+
).with_columns(datetime=struct("start", "end"))["datetime"]
|
2532
|
+
assert len(sr) == 5
|
2533
|
+
date_time = date.at(time).assume_tz(UTC.key)
|
2534
|
+
match start_or_end:
|
2535
|
+
case "start":
|
2536
|
+
expected = exp_start
|
2537
|
+
case "end":
|
2538
|
+
expected = exp_end
|
2539
|
+
case never:
|
2540
|
+
assert_never(never)
|
2541
|
+
index = search_period(sr, date_time, start_or_end=start_or_end)
|
2542
|
+
if expected is None:
|
2543
|
+
assert index is None
|
2544
|
+
else:
|
2545
|
+
assert index is not None
|
2546
|
+
assert 0 <= index <= (len(sr) - 1)
|
2547
|
+
start, end = map(
|
2548
|
+
to_zoned_date_time, cast("Iterable[dt.datetime]", sr[index].values())
|
2549
|
+
)
|
2550
|
+
match start_or_end:
|
2551
|
+
case "start":
|
2552
|
+
assert start <= date_time < end
|
2553
|
+
case "end":
|
2554
|
+
assert start < date_time <= end
|
2555
|
+
case never:
|
2556
|
+
assert_never(never)
|
2557
|
+
if index > 0:
|
2558
|
+
prev_end = to_zoned_date_time(cast("dt.datetime", sr[index - 1]["end"]))
|
2559
|
+
assert prev_end <= date_time
|
2560
|
+
if index < (len(sr) - 1):
|
2561
|
+
next_start = to_zoned_date_time(
|
2562
|
+
cast("dt.datetime", sr[index + 1]["start"])
|
2563
|
+
)
|
2564
|
+
assert date_time <= next_start
|
2565
|
+
|
2566
|
+
|
2477
2567
|
class TestSelectExact:
|
2478
2568
|
df: ClassVar[DataFrame] = DataFrame(
|
2479
2569
|
data=[(True, False), (False, None), (None, True)],
|
@@ -105,6 +105,7 @@ from utilities.whenever import (
|
|
105
105
|
from utilities.zoneinfo import UTC, to_time_zone_name
|
106
106
|
|
107
107
|
if TYPE_CHECKING:
|
108
|
+
import datetime as dt
|
108
109
|
from collections.abc import Callable, Iterable, Iterator, Mapping, Sequence
|
109
110
|
from collections.abc import Set as AbstractSet
|
110
111
|
|
@@ -2460,6 +2461,34 @@ class RoundToFloatError(Exception):
|
|
2460
2461
|
##
|
2461
2462
|
|
2462
2463
|
|
2464
|
+
def search_period(
|
2465
|
+
series: Series,
|
2466
|
+
date_time: ZonedDateTime,
|
2467
|
+
/,
|
2468
|
+
*,
|
2469
|
+
start_or_end: Literal["start", "end"] = "end",
|
2470
|
+
) -> int | None:
|
2471
|
+
"""Search a series of periods for the one containing a given date-time."""
|
2472
|
+
start, end = [series.struct[k] for k in ["start", "end"]]
|
2473
|
+
py_date_time = date_time.py_datetime()
|
2474
|
+
match start_or_end:
|
2475
|
+
case "start":
|
2476
|
+
index = end.search_sorted(py_date_time, side="right")
|
2477
|
+
if index >= len(series):
|
2478
|
+
return None
|
2479
|
+
item: dt.datetime = series[index]["start"]
|
2480
|
+
return index if py_date_time >= item else None
|
2481
|
+
case "end":
|
2482
|
+
index = end.search_sorted(py_date_time, side="left")
|
2483
|
+
if index >= len(series):
|
2484
|
+
return None
|
2485
|
+
item: dt.datetime = series[index]["start"]
|
2486
|
+
return index if py_date_time > item else None
|
2487
|
+
|
2488
|
+
|
2489
|
+
##
|
2490
|
+
|
2491
|
+
|
2463
2492
|
def select_exact(
|
2464
2493
|
df: DataFrame, /, *columns: IntoExprColumn, drop: MaybeIterable[str] | None = None
|
2465
2494
|
) -> DataFrame:
|
@@ -2750,6 +2779,7 @@ __all__ = [
|
|
2750
2779
|
"read_series",
|
2751
2780
|
"replace_time_zone",
|
2752
2781
|
"round_to_float",
|
2782
|
+
"search_period",
|
2753
2783
|
"select_exact",
|
2754
2784
|
"serialize_dataframe",
|
2755
2785
|
"set_first_row_as_columns",
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/modules/package_missing/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/modules/package_missing/module.py
RENAMED
File without changes
|
{dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/modules/package_with/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/modules/package_without/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/modules/package_without/module_1.py
RENAMED
File without changes
|
{dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/src/tests/modules/package_without/module_2.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
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.165.2 → dycw_utilities-0.165.3}/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.165.2 → dycw_utilities-0.165.3}/src/utilities/pytest_plugins/pytest_randomly.py
RENAMED
File without changes
|
{dycw_utilities-0.165.2 → dycw_utilities-0.165.3}/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
|
File without changes
|