dycw-utilities 0.166.15__tar.gz → 0.166.16__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.166.15 → dycw_utilities-0.166.16}/PKG-INFO +1 -1
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/pyproject.toml +2 -2
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_polars.py +107 -3
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/__init__.py +1 -1
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/polars.py +137 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/.gitignore +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/LICENSE +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/README.md +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/__init__.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/conftest.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/modules/__init__.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/modules/package_missing/__init__.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/modules/package_missing/module.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/modules/package_with/__init__.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/modules/package_with/outer_1.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/modules/package_with/outer_2.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/modules/package_without/__init__.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/modules/package_without/module_1.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/modules/package_without/module_2.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/modules/standalone.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/modules/with_imports.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_aeventkit.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_altair.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_asyncio.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_atomicwrites.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_atools.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_cachetools.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_click.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_concurrent.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_contextlib.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_contextvars.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_cryptography.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_cvxpy.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_dataclasses.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_enum.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_errors.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_fastapi.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_fpdf2.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_functions.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_functools.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_getpass.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_git.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_gzip.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_hashlib.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_http.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_hypothesis.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_importlib.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_inflect.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_ipython.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_iterables.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_json.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_jupyter.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_libcst.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_lightweight_charts.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_logging.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_math.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_memory_profiler.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_modules.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_more_itertools.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_numpy.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_objects/__init__.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_objects/objects.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_operator.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_optuna.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_orjson.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_os.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_parse.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_pathlib.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_pickle.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_platform.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_polars_ols.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_postgres.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_pottery.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_pqdm.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_psutil.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_pydantic_settings.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_pydantic_settings_sops.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_pyinstrument.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_pytest.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_pytest_randomly.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_pytest_regressions.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_random.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_re.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_redis.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_reprlib.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_scipy.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_sentinel.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_shelve.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_slack_sdk.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_socket.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_sqlalchemy.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_statsmodels.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_string.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_tempfile.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_testbook.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_text.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_threading.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_timer.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_traceback.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_typed_settings.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_types.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_typing.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_typing_funcs/__init__.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_typing_funcs/no_future.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_typing_funcs/with_future.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_tzdata.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_tzlocal.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_uuid.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_version.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_warnings.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_whenever.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_zipfile.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_zoneinfo.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/aeventkit.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/altair.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/asyncio.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/atomicwrites.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/atools.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/cachetools.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/click.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/concurrent.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/contextlib.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/contextvars.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/cryptography.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/cvxpy.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/dataclasses.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/enum.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/errors.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/fastapi.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/fpdf2.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/functions.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/functools.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/getpass.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/git.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/gzip.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/hashlib.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/http.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/hypothesis.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/importlib.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/inflect.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/ipython.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/iterables.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/json.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/jupyter.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/libcst.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/lightweight_charts.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/logging.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/math.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/memory_profiler.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/modules.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/more_itertools.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/numpy.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/operator.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/optuna.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/orjson.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/os.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/parse.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/pathlib.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/pickle.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/platform.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/polars_ols.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/postgres.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/pottery.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/pqdm.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/psutil.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/py.typed +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/pydantic_settings.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/pydantic_settings_sops.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/pyinstrument.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/pytest.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/pytest_plugins/__init__.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/pytest_plugins/pytest_randomly.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/pytest_plugins/pytest_regressions.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/pytest_regressions.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/random.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/re.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/redis.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/reprlib.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/scipy.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/sentinel.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/shelve.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/slack_sdk.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/socket.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/sqlalchemy.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/statsmodels.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/string.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/tempfile.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/testbook.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/text.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/threading.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/timer.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/traceback.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/typed_settings.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/types.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/typing.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/tzdata.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/tzlocal.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/uuid.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/version.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/warnings.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/whenever.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/zipfile.py +0 -0
- {dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/utilities/zoneinfo.py +0 -0
@@ -246,7 +246,7 @@ dependencies = [
|
|
246
246
|
name = "dycw-utilities"
|
247
247
|
readme = "README.md"
|
248
248
|
requires-python = ">= 3.12"
|
249
|
-
version = "0.166.
|
249
|
+
version = "0.166.16"
|
250
250
|
|
251
251
|
[project.entry-points.pytest11]
|
252
252
|
pytest-randomly = "utilities.pytest_plugins.pytest_randomly"
|
@@ -279,7 +279,7 @@ test = [
|
|
279
279
|
# bump-my-version
|
280
280
|
[tool.bumpversion]
|
281
281
|
allow_dirty = true
|
282
|
-
current_version = "0.166.
|
282
|
+
current_version = "0.166.16"
|
283
283
|
|
284
284
|
[[tool.bumpversion.files]]
|
285
285
|
filename = "src/utilities/__init__.py"
|
@@ -6,7 +6,7 @@ import itertools
|
|
6
6
|
import math
|
7
7
|
from dataclasses import dataclass, field
|
8
8
|
from enum import auto
|
9
|
-
from itertools import chain
|
9
|
+
from itertools import chain
|
10
10
|
from math import isfinite, nan
|
11
11
|
from random import Random
|
12
12
|
from typing import TYPE_CHECKING, Any, ClassVar, Literal, assert_never, cast
|
@@ -49,6 +49,7 @@ from polars import (
|
|
49
49
|
col,
|
50
50
|
concat,
|
51
51
|
date_range,
|
52
|
+
datetime_range,
|
52
53
|
int_range,
|
53
54
|
lit,
|
54
55
|
struct,
|
@@ -58,7 +59,14 @@ from polars.schema import Schema
|
|
58
59
|
from polars.testing import assert_frame_equal, assert_series_equal
|
59
60
|
from pytest import mark, param, raises
|
60
61
|
from scipy.stats import norm
|
61
|
-
from whenever import
|
62
|
+
from whenever import (
|
63
|
+
Date,
|
64
|
+
DateDelta,
|
65
|
+
DateTimeDelta,
|
66
|
+
PlainDateTime,
|
67
|
+
TimeDelta,
|
68
|
+
ZonedDateTime,
|
69
|
+
)
|
62
70
|
|
63
71
|
import tests.test_math
|
64
72
|
import utilities.polars
|
@@ -168,6 +176,9 @@ from utilities.polars import (
|
|
168
176
|
ensure_expr_or_series,
|
169
177
|
ensure_expr_or_series_many,
|
170
178
|
expr_to_series,
|
179
|
+
false_like,
|
180
|
+
filter_date,
|
181
|
+
filter_time,
|
171
182
|
finite_ewm_mean,
|
172
183
|
first_true_horizontal,
|
173
184
|
get_data_type_or_series_time_zone,
|
@@ -208,6 +219,7 @@ from utilities.polars import (
|
|
208
219
|
to_not_true,
|
209
220
|
to_true,
|
210
221
|
touch,
|
222
|
+
true_like,
|
211
223
|
try_reify_expr,
|
212
224
|
uniform,
|
213
225
|
unique_element,
|
@@ -1479,6 +1491,42 @@ class TestExprToSeries:
|
|
1479
1491
|
assert_series_equal(series, expected)
|
1480
1492
|
|
1481
1493
|
|
1494
|
+
class TestComputeDateFilter:
|
1495
|
+
def test_main(self) -> None:
|
1496
|
+
series = datetime_range(
|
1497
|
+
start=ZonedDateTime(2024, 1, 1, tz=UTC.key).py_datetime(),
|
1498
|
+
end=ZonedDateTime(2024, 1, 4, 12, tz=UTC.key).py_datetime(),
|
1499
|
+
interval="12h",
|
1500
|
+
eager=True,
|
1501
|
+
).alias("datetime")
|
1502
|
+
assert len(series) == 8
|
1503
|
+
result = filter_date(series, include=[Date(2024, 1, 2), Date(2024, 1, 3)])
|
1504
|
+
expected = Series(
|
1505
|
+
name="datetime",
|
1506
|
+
values=[False, False, True, True, True, True, False, False],
|
1507
|
+
dtype=Boolean,
|
1508
|
+
)
|
1509
|
+
assert_series_equal(result, expected)
|
1510
|
+
|
1511
|
+
|
1512
|
+
class TestComputeTimeFilter:
|
1513
|
+
def test_main(self) -> None:
|
1514
|
+
series = datetime_range(
|
1515
|
+
start=ZonedDateTime(2024, 1, 1, tz=UTC.key).py_datetime(),
|
1516
|
+
end=ZonedDateTime(2024, 1, 3, 0, tz=UTC.key).py_datetime(),
|
1517
|
+
interval="6h",
|
1518
|
+
eager=True,
|
1519
|
+
).alias("datetime")
|
1520
|
+
assert len(series) == 9
|
1521
|
+
result = filter_time(series, include=[(whenever.Time(6), whenever.Time(12))])
|
1522
|
+
expected = Series(
|
1523
|
+
name="datetime",
|
1524
|
+
values=[False, True, True, False, False, True, True, False, False],
|
1525
|
+
dtype=Boolean,
|
1526
|
+
)
|
1527
|
+
assert_series_equal(result, expected)
|
1528
|
+
|
1529
|
+
|
1482
1530
|
class TestFiniteEWMMean:
|
1483
1531
|
alpha_0_75_values: ClassVar[list[float]] = [
|
1484
1532
|
-8.269850726503885,
|
@@ -1838,7 +1886,9 @@ class TestIsNearEvent:
|
|
1838
1886
|
def test_no_exprs(self) -> None:
|
1839
1887
|
result = self.df.with_columns(is_near_event().alias("z"))["z"]
|
1840
1888
|
expected = Series(
|
1841
|
-
name="z",
|
1889
|
+
name="z",
|
1890
|
+
values=list(itertools.repeat(object=False, times=10)),
|
1891
|
+
dtype=Boolean,
|
1842
1892
|
)
|
1843
1893
|
assert_series_equal(result, expected)
|
1844
1894
|
|
@@ -2783,6 +2833,60 @@ class TestToTrueAndFalse:
|
|
2783
2833
|
assert_series_equal(result, exp_series)
|
2784
2834
|
|
2785
2835
|
|
2836
|
+
class TestTrueLikeAndFalseLike:
|
2837
|
+
@given(length=hypothesis.strategies.integers(0, 10), name=text_ascii())
|
2838
|
+
def test_true_expr(self, *, length: int, name: str) -> None:
|
2839
|
+
expr = int_range(end=length).alias(name)
|
2840
|
+
result = true_like(expr)
|
2841
|
+
assert isinstance(result, Expr)
|
2842
|
+
result2 = (
|
2843
|
+
int_range(end=length, eager=True)
|
2844
|
+
.alias(f"_{name}")
|
2845
|
+
.to_frame()
|
2846
|
+
.with_columns(result)[name]
|
2847
|
+
)
|
2848
|
+
expected = pl.repeat(value=True, n=length, dtype=Boolean, eager=True).alias(
|
2849
|
+
name
|
2850
|
+
)
|
2851
|
+
assert_series_equal(result2, expected)
|
2852
|
+
|
2853
|
+
@given(length=hypothesis.strategies.integers(0, 10), name=text_ascii())
|
2854
|
+
def test_true_series(self, *, length: int, name: str) -> None:
|
2855
|
+
series = int_range(end=length, eager=True).alias(name)
|
2856
|
+
result = true_like(series)
|
2857
|
+
assert isinstance(result, Series)
|
2858
|
+
expected = pl.repeat(value=True, n=length, dtype=Boolean, eager=True).alias(
|
2859
|
+
name
|
2860
|
+
)
|
2861
|
+
assert_series_equal(result, expected)
|
2862
|
+
|
2863
|
+
@given(length=hypothesis.strategies.integers(0, 10), name=text_ascii())
|
2864
|
+
def test_false_expr(self, *, length: int, name: str) -> None:
|
2865
|
+
expr = int_range(end=length).alias(name)
|
2866
|
+
result = false_like(expr)
|
2867
|
+
assert isinstance(result, Expr)
|
2868
|
+
result2 = (
|
2869
|
+
int_range(end=length, eager=True)
|
2870
|
+
.alias(f"_{name}")
|
2871
|
+
.to_frame()
|
2872
|
+
.with_columns(result)[name]
|
2873
|
+
)
|
2874
|
+
expected = pl.repeat(value=False, n=length, dtype=Boolean, eager=True).alias(
|
2875
|
+
name
|
2876
|
+
)
|
2877
|
+
assert_series_equal(result2, expected)
|
2878
|
+
|
2879
|
+
@given(length=hypothesis.strategies.integers(0, 10), name=text_ascii())
|
2880
|
+
def test_false_series(self, *, length: int, name: str) -> None:
|
2881
|
+
series = int_range(end=length, eager=True).alias(name)
|
2882
|
+
result = false_like(series)
|
2883
|
+
assert isinstance(result, Series)
|
2884
|
+
expected = pl.repeat(value=False, n=length, dtype=Boolean, eager=True).alias(
|
2885
|
+
name
|
2886
|
+
)
|
2887
|
+
assert_series_equal(result, expected)
|
2888
|
+
|
2889
|
+
|
2786
2890
|
class TestTryReifyExpr:
|
2787
2891
|
# expr
|
2788
2892
|
|
@@ -70,6 +70,7 @@ from utilities.iterables import (
|
|
70
70
|
check_supermapping,
|
71
71
|
is_iterable_not_str,
|
72
72
|
one,
|
73
|
+
resolve_include_and_exclude,
|
73
74
|
)
|
74
75
|
from utilities.json import write_formatted_json
|
75
76
|
from utilities.math import (
|
@@ -1269,6 +1270,111 @@ def expr_to_series(expr: Expr, /) -> Series:
|
|
1269
1270
|
##
|
1270
1271
|
|
1271
1272
|
|
1273
|
+
@overload
|
1274
|
+
def filter_date(
|
1275
|
+
column: ExprLike = "datetime",
|
1276
|
+
/,
|
1277
|
+
*,
|
1278
|
+
time_zone: ZoneInfo | None = None,
|
1279
|
+
include: MaybeIterable[whenever.Date] | None = None,
|
1280
|
+
exclude: MaybeIterable[whenever.Date] | None = None,
|
1281
|
+
) -> Expr: ...
|
1282
|
+
@overload
|
1283
|
+
def filter_date(
|
1284
|
+
column: Series,
|
1285
|
+
/,
|
1286
|
+
*,
|
1287
|
+
time_zone: ZoneInfo | None = None,
|
1288
|
+
include: MaybeIterable[whenever.Date] | None = None,
|
1289
|
+
exclude: MaybeIterable[whenever.Date] | None = None,
|
1290
|
+
) -> Series: ...
|
1291
|
+
@overload
|
1292
|
+
def filter_date(
|
1293
|
+
column: IntoExprColumn = "datetime",
|
1294
|
+
/,
|
1295
|
+
*,
|
1296
|
+
time_zone: ZoneInfo | None = None,
|
1297
|
+
include: MaybeIterable[whenever.Date] | None = None,
|
1298
|
+
exclude: MaybeIterable[whenever.Date] | None = None,
|
1299
|
+
) -> ExprOrSeries: ...
|
1300
|
+
def filter_date(
|
1301
|
+
column: IntoExprColumn = "datetime",
|
1302
|
+
/,
|
1303
|
+
*,
|
1304
|
+
time_zone: ZoneInfo | None = None,
|
1305
|
+
include: MaybeIterable[whenever.Date] | None = None,
|
1306
|
+
exclude: MaybeIterable[whenever.Date] | None = None,
|
1307
|
+
) -> ExprOrSeries:
|
1308
|
+
"""Compute the filter based on a set of dates."""
|
1309
|
+
column = ensure_expr_or_series(column)
|
1310
|
+
if time_zone is not None:
|
1311
|
+
column = column.dt.convert_time_zone(time_zone.key)
|
1312
|
+
keep = true_like(column)
|
1313
|
+
date = column.dt.date()
|
1314
|
+
include, exclude = resolve_include_and_exclude(include=include, exclude=exclude)
|
1315
|
+
if include is not None:
|
1316
|
+
keep &= date.is_in([d.py_date() for d in include])
|
1317
|
+
if exclude is not None:
|
1318
|
+
keep &= ~date.is_in([d.py_date() for d in exclude])
|
1319
|
+
return try_reify_expr(keep, column)
|
1320
|
+
|
1321
|
+
|
1322
|
+
@overload
|
1323
|
+
def filter_time(
|
1324
|
+
column: ExprLike = "datetime",
|
1325
|
+
/,
|
1326
|
+
*,
|
1327
|
+
time_zone: ZoneInfo | None = None,
|
1328
|
+
include: MaybeIterable[tuple[whenever.Time, whenever.Time]] | None = None,
|
1329
|
+
exclude: MaybeIterable[tuple[whenever.Time, whenever.Time]] | None = None,
|
1330
|
+
) -> Expr: ...
|
1331
|
+
@overload
|
1332
|
+
def filter_time(
|
1333
|
+
column: Series,
|
1334
|
+
/,
|
1335
|
+
*,
|
1336
|
+
time_zone: ZoneInfo | None = None,
|
1337
|
+
include: MaybeIterable[tuple[whenever.Time, whenever.Time]] | None = None,
|
1338
|
+
exclude: MaybeIterable[tuple[whenever.Time, whenever.Time]] | None = None,
|
1339
|
+
) -> Series: ...
|
1340
|
+
@overload
|
1341
|
+
def filter_time(
|
1342
|
+
column: IntoExprColumn = "datetime",
|
1343
|
+
/,
|
1344
|
+
*,
|
1345
|
+
time_zone: ZoneInfo | None = None,
|
1346
|
+
include: MaybeIterable[tuple[whenever.Time, whenever.Time]] | None = None,
|
1347
|
+
exclude: MaybeIterable[tuple[whenever.Time, whenever.Time]] | None = None,
|
1348
|
+
) -> ExprOrSeries: ...
|
1349
|
+
def filter_time(
|
1350
|
+
column: IntoExprColumn = "datetime",
|
1351
|
+
/,
|
1352
|
+
*,
|
1353
|
+
time_zone: ZoneInfo | None = None,
|
1354
|
+
include: MaybeIterable[tuple[whenever.Time, whenever.Time]] | None = None,
|
1355
|
+
exclude: MaybeIterable[tuple[whenever.Time, whenever.Time]] | None = None,
|
1356
|
+
) -> ExprOrSeries:
|
1357
|
+
"""Compute the filter based on a set of times."""
|
1358
|
+
column = ensure_expr_or_series(column)
|
1359
|
+
if time_zone is not None:
|
1360
|
+
column = column.dt.convert_time_zone(time_zone.key)
|
1361
|
+
keep = true_like(column)
|
1362
|
+
time = column.dt.time()
|
1363
|
+
include, exclude = resolve_include_and_exclude(include=include, exclude=exclude)
|
1364
|
+
if include is not None:
|
1365
|
+
keep &= any_horizontal(
|
1366
|
+
time.is_between(s.py_time(), e.py_time()) for s, e in include
|
1367
|
+
)
|
1368
|
+
if exclude is not None:
|
1369
|
+
keep &= ~any_horizontal(
|
1370
|
+
time.is_between(s.py_time(), e.py_time()) for s, e in exclude
|
1371
|
+
)
|
1372
|
+
return try_reify_expr(keep, column)
|
1373
|
+
|
1374
|
+
|
1375
|
+
##
|
1376
|
+
|
1377
|
+
|
1272
1378
|
@overload
|
1273
1379
|
def finite_ewm_mean(
|
1274
1380
|
column: ExprLike,
|
@@ -2643,6 +2749,33 @@ def to_not_false(column: IntoExprColumn, /) -> ExprOrSeries:
|
|
2643
2749
|
##
|
2644
2750
|
|
2645
2751
|
|
2752
|
+
@overload
|
2753
|
+
def true_like(column: ExprLike, /) -> Expr: ...
|
2754
|
+
@overload
|
2755
|
+
def true_like(column: Series, /) -> Series: ...
|
2756
|
+
@overload
|
2757
|
+
def true_like(column: IntoExprColumn, /) -> ExprOrSeries: ...
|
2758
|
+
def true_like(column: IntoExprColumn, /) -> ExprOrSeries:
|
2759
|
+
"""Compute a column of `True` values."""
|
2760
|
+
column = ensure_expr_or_series(column)
|
2761
|
+
return column.is_null() | column.is_not_null()
|
2762
|
+
|
2763
|
+
|
2764
|
+
@overload
|
2765
|
+
def false_like(column: ExprLike, /) -> Expr: ...
|
2766
|
+
@overload
|
2767
|
+
def false_like(column: Series, /) -> Series: ...
|
2768
|
+
@overload
|
2769
|
+
def false_like(column: IntoExprColumn, /) -> ExprOrSeries: ...
|
2770
|
+
def false_like(column: IntoExprColumn, /) -> ExprOrSeries:
|
2771
|
+
"""Compute a column of `False` values."""
|
2772
|
+
column = ensure_expr_or_series(column)
|
2773
|
+
return column.is_null() & column.is_not_null()
|
2774
|
+
|
2775
|
+
|
2776
|
+
##
|
2777
|
+
|
2778
|
+
|
2646
2779
|
def try_reify_expr(
|
2647
2780
|
expr: IntoExprColumn, /, *exprs: IntoExprColumn, **named_exprs: IntoExprColumn
|
2648
2781
|
) -> ExprOrSeries:
|
@@ -2798,6 +2931,9 @@ __all__ = [
|
|
2798
2931
|
"ensure_expr_or_series",
|
2799
2932
|
"ensure_expr_or_series_many",
|
2800
2933
|
"expr_to_series",
|
2934
|
+
"false_like",
|
2935
|
+
"filter_date",
|
2936
|
+
"filter_time",
|
2801
2937
|
"finite_ewm_mean",
|
2802
2938
|
"first_true_horizontal",
|
2803
2939
|
"get_data_type_or_series_time_zone",
|
@@ -2838,6 +2974,7 @@ __all__ = [
|
|
2838
2974
|
"to_not_true",
|
2839
2975
|
"to_true",
|
2840
2976
|
"touch",
|
2977
|
+
"true_like",
|
2841
2978
|
"try_reify_expr",
|
2842
2979
|
"uniform",
|
2843
2980
|
"unique_element",
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/modules/package_missing/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/modules/package_missing/module.py
RENAMED
File without changes
|
{dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/modules/package_with/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/modules/package_with/outer_1.py
RENAMED
File without changes
|
{dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/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.166.15 → dycw_utilities-0.166.16}/src/tests/modules/package_without/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/modules/package_without/module_1.py
RENAMED
File without changes
|
{dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/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
|
{dycw_utilities-0.166.15 → dycw_utilities-0.166.16}/src/tests/test_pydantic_settings_sops.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
|