dycw-utilities 0.159.0__tar.gz → 0.159.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/PKG-INFO +1 -1
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/pyproject.toml +3 -3
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_polars.py +50 -9
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/__init__.py +1 -1
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/polars.py +75 -26
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/pytest_regressions.py +1 -3
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/.gitignore +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/LICENSE +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/README.md +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/__init__.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/conftest.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/modules/__init__.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/modules/package_missing/__init__.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/modules/package_missing/module.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/modules/package_with/__init__.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/modules/package_with/outer_1.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/modules/package_with/outer_2.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/modules/package_without/__init__.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/modules/package_without/module_1.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/modules/package_without/module_2.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/modules/standalone.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/modules/with_imports.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_altair.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_asyncio.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_atomicwrites.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_atools.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_cachetools.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_click.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_concurrent.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_contextlib.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_contextvars.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_cryptography.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_cvxpy.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_dataclasses.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_enum.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_errors.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_eventkit.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_fastapi.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_fpdf2.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_functions.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_functools.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_getpass.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_gzip.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_hashlib.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_http.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_hypothesis.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_importlib.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_inflect.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_ipython.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_iterables.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_json.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_jupyter.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_libcst.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_lightweight_charts.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_logging.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_math.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_memory_profiler.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_modules.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_more_itertools.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_numpy.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_objects/__init__.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_objects/objects.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_operator.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_optuna.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_orjson.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_os.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_parse.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_pathlib.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_pickle.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_platform.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_polars_ols.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_postgres.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_pottery.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_pqdm.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_psutil.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_pyinstrument.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_pytest.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_pytest_randomly.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_pytest_regressions.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_random.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_re.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_redis.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_reprlib.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_scipy.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_sentinel.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_shelve.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_slack_sdk.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_socket.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_sqlalchemy.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_statsmodels.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_string.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_tempfile.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_text.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_threading.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_timer.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_traceback.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_typed_settings.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_types.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_typing.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_typing_funcs/__init__.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_typing_funcs/no_future.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_typing_funcs/with_future.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_tzdata.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_tzlocal.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_uuid.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_version.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_warnings.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_whenever.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_zipfile.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/test_zoneinfo.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/altair.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/asyncio.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/atomicwrites.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/atools.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/cachetools.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/click.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/concurrent.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/contextlib.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/contextvars.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/cryptography.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/cvxpy.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/dataclasses.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/enum.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/errors.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/eventkit.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/fastapi.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/fpdf2.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/functions.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/functools.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/getpass.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/gzip.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/hashlib.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/http.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/hypothesis.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/importlib.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/inflect.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/ipython.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/iterables.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/json.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/jupyter.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/libcst.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/lightweight_charts.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/logging.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/math.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/memory_profiler.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/modules.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/more_itertools.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/numpy.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/operator.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/optuna.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/orjson.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/os.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/parse.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/pathlib.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/pickle.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/platform.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/polars_ols.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/postgres.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/pottery.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/pqdm.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/psutil.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/py.typed +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/pyinstrument.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/pytest.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/pytest_plugins/__init__.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/pytest_plugins/pytest_randomly.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/pytest_plugins/pytest_regressions.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/random.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/re.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/redis.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/reprlib.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/scipy.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/sentinel.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/shelve.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/slack_sdk.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/socket.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/sqlalchemy.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/statsmodels.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/string.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/tempfile.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/text.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/threading.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/timer.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/traceback.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/typed_settings.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/types.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/typing.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/tzdata.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/tzlocal.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/uuid.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/version.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/warnings.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/whenever.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/zipfile.py +0 -0
- {dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/utilities/zoneinfo.py +0 -0
@@ -118,7 +118,7 @@ orjson-test = [
|
|
118
118
|
"polars",
|
119
119
|
]
|
120
120
|
polars = [
|
121
|
-
"polars >=1.32.
|
121
|
+
"polars >=1.32.3, <1.33",
|
122
122
|
]
|
123
123
|
polars-ols = [
|
124
124
|
"polars-ols >=0.3.5, <0.4",
|
@@ -227,7 +227,7 @@ dependencies = [
|
|
227
227
|
name = "dycw-utilities"
|
228
228
|
readme = "README.md"
|
229
229
|
requires-python = ">= 3.12"
|
230
|
-
version = "0.159.
|
230
|
+
version = "0.159.2"
|
231
231
|
|
232
232
|
[project.entry-points.pytest11]
|
233
233
|
pytest-randomly = "utilities.pytest_plugins.pytest_randomly"
|
@@ -259,7 +259,7 @@ test = [
|
|
259
259
|
# bump-my-version
|
260
260
|
[tool.bumpversion]
|
261
261
|
allow_dirty = true
|
262
|
-
current_version = "0.159.
|
262
|
+
current_version = "0.159.2"
|
263
263
|
|
264
264
|
[[tool.bumpversion.files]]
|
265
265
|
filename = "src/utilities/__init__.py"
|
@@ -94,6 +94,8 @@ from utilities.polars import (
|
|
94
94
|
FiniteEWMMeanError,
|
95
95
|
InsertAfterError,
|
96
96
|
InsertBeforeError,
|
97
|
+
OneColumnEmptyError,
|
98
|
+
OneColumnNonUniqueError,
|
97
99
|
SetFirstRowAsColumnsError,
|
98
100
|
TimePeriodDType,
|
99
101
|
_check_polars_dataframe_predicates,
|
@@ -147,7 +149,6 @@ from utilities.polars import (
|
|
147
149
|
boolean_value_counts,
|
148
150
|
check_polars_dataframe,
|
149
151
|
choice,
|
150
|
-
collect_series,
|
151
152
|
columns_to_dict,
|
152
153
|
concat_series,
|
153
154
|
convert_time_zone,
|
@@ -161,7 +162,9 @@ from utilities.polars import (
|
|
161
162
|
ensure_data_type,
|
162
163
|
ensure_expr_or_series,
|
163
164
|
ensure_expr_or_series_many,
|
165
|
+
expr_to_series,
|
164
166
|
finite_ewm_mean,
|
167
|
+
first_true_horizontal,
|
165
168
|
get_data_type_or_series_time_zone,
|
166
169
|
get_expr_name,
|
167
170
|
get_frequency_spectrum,
|
@@ -180,6 +183,7 @@ from utilities.polars import (
|
|
180
183
|
nan_sum_cols,
|
181
184
|
normal,
|
182
185
|
offset_datetime,
|
186
|
+
one_column,
|
183
187
|
order_of_magnitude,
|
184
188
|
period_range,
|
185
189
|
read_dataframe,
|
@@ -827,14 +831,6 @@ class TestChoice:
|
|
827
831
|
assert series.is_in(list(elements)).all()
|
828
832
|
|
829
833
|
|
830
|
-
class TestCollectSeries:
|
831
|
-
def test_main(self) -> None:
|
832
|
-
expr = int_range(end=10)
|
833
|
-
series = collect_series(expr)
|
834
|
-
expected = int_range(end=10, eager=True)
|
835
|
-
assert_series_equal(series, expected)
|
836
|
-
|
837
|
-
|
838
834
|
class TestColumnsToDict:
|
839
835
|
def test_main(self) -> None:
|
840
836
|
df = DataFrame(
|
@@ -1470,6 +1466,14 @@ class TestEnsureExprOrSeriesMany:
|
|
1470
1466
|
assert isinstance(r, Expr | Series)
|
1471
1467
|
|
1472
1468
|
|
1469
|
+
class TestExprToSeries:
|
1470
|
+
def test_main(self) -> None:
|
1471
|
+
expr = int_range(end=10)
|
1472
|
+
series = expr_to_series(expr)
|
1473
|
+
expected = int_range(end=10, eager=True)
|
1474
|
+
assert_series_equal(series, expected)
|
1475
|
+
|
1476
|
+
|
1473
1477
|
class TestFiniteEWMMean:
|
1474
1478
|
alpha_0_75_values: ClassVar[list[float]] = [
|
1475
1479
|
-8.269850726503885,
|
@@ -1555,6 +1559,22 @@ class TestFiniteEWMWeights:
|
|
1555
1559
|
_ = _finite_ewm_weights(min_weight=1.0)
|
1556
1560
|
|
1557
1561
|
|
1562
|
+
class TestFirstTrueHorizontal:
|
1563
|
+
@mark.parametrize(
|
1564
|
+
("row", "expected"),
|
1565
|
+
[
|
1566
|
+
param([True, True, True], 0),
|
1567
|
+
param([False, True, True], 1),
|
1568
|
+
param([False, False, True], 2),
|
1569
|
+
param([False, False, False], None),
|
1570
|
+
],
|
1571
|
+
)
|
1572
|
+
def test_main(self, *, row: list[bool], expected: int | None) -> None:
|
1573
|
+
df = DataFrame([row], schema={str(i): Boolean for i in range(3)}, orient="row")
|
1574
|
+
result = first_true_horizontal(df)
|
1575
|
+
assert result.item() == expected
|
1576
|
+
|
1577
|
+
|
1558
1578
|
class TestGetDataTypeOrSeriesTimeZone:
|
1559
1579
|
@given(
|
1560
1580
|
time_zone=sampled_from([HongKong, UTC]),
|
@@ -2239,6 +2259,27 @@ class TestOffsetDateTime:
|
|
2239
2259
|
assert result == expected
|
2240
2260
|
|
2241
2261
|
|
2262
|
+
class TestOneColumn:
|
2263
|
+
def test_main(self) -> None:
|
2264
|
+
series = int_range(end=10, eager=True).alias("x")
|
2265
|
+
df = series.to_frame()
|
2266
|
+
result = one_column(df)
|
2267
|
+
assert_series_equal(result, series)
|
2268
|
+
|
2269
|
+
def test_error_empty(self) -> None:
|
2270
|
+
with raises(OneColumnEmptyError, match="DataFrame must not be empty"):
|
2271
|
+
_ = one_column(DataFrame())
|
2272
|
+
|
2273
|
+
def test_error_non_unique(self) -> None:
|
2274
|
+
x, y = [int_range(end=10, eager=True).alias(name) for name in ["x", "y"]]
|
2275
|
+
df = concat_series(x, y)
|
2276
|
+
with raises(
|
2277
|
+
OneColumnNonUniqueError,
|
2278
|
+
match="DataFrame must contain exactly one column; got 'x', 'y' and perhaps more",
|
2279
|
+
):
|
2280
|
+
_ = one_column(df)
|
2281
|
+
|
2282
|
+
|
2242
2283
|
class TestOrderOfMagnitude:
|
2243
2284
|
@given(
|
2244
2285
|
sign=sampled_from([1, -1]),
|
@@ -32,6 +32,7 @@ from polars import (
|
|
32
32
|
any_horizontal,
|
33
33
|
col,
|
34
34
|
concat,
|
35
|
+
concat_list,
|
35
36
|
datetime_range,
|
36
37
|
int_range,
|
37
38
|
lit,
|
@@ -42,9 +43,9 @@ from polars import (
|
|
42
43
|
from polars._typing import PolarsDataType
|
43
44
|
from polars.datatypes import DataType, DataTypeClass
|
44
45
|
from polars.exceptions import (
|
45
|
-
ColumnNotFoundError,
|
46
|
+
ColumnNotFoundError,
|
46
47
|
NoRowsReturnedError,
|
47
|
-
OutOfBoundsError,
|
48
|
+
OutOfBoundsError,
|
48
49
|
PolarsInefficientMapWarning,
|
49
50
|
)
|
50
51
|
from polars.schema import Schema
|
@@ -337,8 +338,8 @@ def are_frames_equal(
|
|
337
338
|
check_column_order: bool = True,
|
338
339
|
check_dtypes: bool = True,
|
339
340
|
check_exact: bool = False,
|
340
|
-
|
341
|
-
|
341
|
+
rel_tol: float = 1e-5,
|
342
|
+
abs_tol: float = 1e-8,
|
342
343
|
categorical_as_str: bool = False,
|
343
344
|
) -> bool:
|
344
345
|
"""Check if two DataFrames are equal."""
|
@@ -350,8 +351,8 @@ def are_frames_equal(
|
|
350
351
|
check_column_order=check_column_order,
|
351
352
|
check_dtypes=check_dtypes,
|
352
353
|
check_exact=check_exact,
|
353
|
-
|
354
|
-
|
354
|
+
rel_tol=rel_tol,
|
355
|
+
abs_tol=abs_tol,
|
355
356
|
categorical_as_str=categorical_as_str,
|
356
357
|
)
|
357
358
|
except AssertionError:
|
@@ -783,15 +784,6 @@ def choice(
|
|
783
784
|
##
|
784
785
|
|
785
786
|
|
786
|
-
def collect_series(expr: Expr, /) -> Series:
|
787
|
-
"""Collect a column expression into a Series."""
|
788
|
-
data = DataFrame().with_columns(expr)
|
789
|
-
return data[one(data.columns)]
|
790
|
-
|
791
|
-
|
792
|
-
##
|
793
|
-
|
794
|
-
|
795
787
|
def columns_to_dict(df: DataFrame, key: str, value: str, /) -> dict[Any, Any]:
|
796
788
|
"""Map a pair of columns into a dictionary. Must be unique on `key`."""
|
797
789
|
col_key = df[key]
|
@@ -1044,7 +1036,9 @@ def _dataclass_to_dataframe_cast(series: Series, /) -> Series:
|
|
1044
1036
|
is_path = series.map_elements(make_isinstance(Path), return_dtype=Boolean).all()
|
1045
1037
|
is_uuid = series.map_elements(make_isinstance(UUID), return_dtype=Boolean).all()
|
1046
1038
|
if is_path or is_uuid:
|
1047
|
-
with suppress_warnings(
|
1039
|
+
with suppress_warnings(
|
1040
|
+
category=cast("type[Warning]", PolarsInefficientMapWarning)
|
1041
|
+
):
|
1048
1042
|
return series.map_elements(str, return_dtype=String)
|
1049
1043
|
if series.map_elements(make_isinstance(whenever.Time), return_dtype=Boolean).all():
|
1050
1044
|
return series.map_elements(lambda x: x.py_time(), return_dtype=pl.Time)
|
@@ -1219,6 +1213,14 @@ def ensure_expr_or_series_many(
|
|
1219
1213
|
##
|
1220
1214
|
|
1221
1215
|
|
1216
|
+
def expr_to_series(expr: Expr, /) -> Series:
|
1217
|
+
"""Collect a column expression into a Series."""
|
1218
|
+
return one_column(DataFrame().with_columns(expr))
|
1219
|
+
|
1220
|
+
|
1221
|
+
##
|
1222
|
+
|
1223
|
+
|
1222
1224
|
@overload
|
1223
1225
|
def finite_ewm_mean(
|
1224
1226
|
column: ExprLike,
|
@@ -1322,6 +1324,15 @@ class _FiniteEWMWeightsError(Exception):
|
|
1322
1324
|
##
|
1323
1325
|
|
1324
1326
|
|
1327
|
+
def first_true_horizontal(df: DataFrame, /) -> Series:
|
1328
|
+
"""Get the index of the first true in each row."""
|
1329
|
+
expr = when(any_horizontal(pl.all())).then(concat_list(pl.all()).list.arg_max())
|
1330
|
+
return one_column(df.select(expr))
|
1331
|
+
|
1332
|
+
|
1333
|
+
##
|
1334
|
+
|
1335
|
+
|
1325
1336
|
def get_data_type_or_series_time_zone(
|
1326
1337
|
dtype_or_series: PolarsDataType | Series, /
|
1327
1338
|
) -> ZoneInfo:
|
@@ -1393,8 +1404,7 @@ def get_expr_name(obj: Series | DataFrame, expr: IntoExprColumn, /) -> str:
|
|
1393
1404
|
case Series() as series:
|
1394
1405
|
return get_expr_name(series.to_frame(), expr)
|
1395
1406
|
case DataFrame() as df:
|
1396
|
-
|
1397
|
-
return one(selected.columns)
|
1407
|
+
return one_column(df.select(expr)).name
|
1398
1408
|
case never:
|
1399
1409
|
assert_never(never)
|
1400
1410
|
|
@@ -1989,6 +1999,43 @@ def offset_datetime(
|
|
1989
1999
|
##
|
1990
2000
|
|
1991
2001
|
|
2002
|
+
def one_column(df: DataFrame, /) -> Series:
|
2003
|
+
"""Return the unique column in a DataFrame."""
|
2004
|
+
try:
|
2005
|
+
return df[one(df.columns)]
|
2006
|
+
except OneEmptyError:
|
2007
|
+
raise OneColumnEmptyError(df=df) from None
|
2008
|
+
except OneNonUniqueError as error:
|
2009
|
+
raise OneColumnNonUniqueError(
|
2010
|
+
df=df, first=error.first, second=error.second
|
2011
|
+
) from None
|
2012
|
+
|
2013
|
+
|
2014
|
+
@dataclass(kw_only=True, slots=True)
|
2015
|
+
class OneColumnError(Exception):
|
2016
|
+
df: DataFrame
|
2017
|
+
|
2018
|
+
|
2019
|
+
@dataclass(kw_only=True, slots=True)
|
2020
|
+
class OneColumnEmptyError(OneColumnError):
|
2021
|
+
@override
|
2022
|
+
def __str__(self) -> str:
|
2023
|
+
return "DataFrame must not be empty"
|
2024
|
+
|
2025
|
+
|
2026
|
+
@dataclass(kw_only=True, slots=True)
|
2027
|
+
class OneColumnNonUniqueError(OneColumnError):
|
2028
|
+
first: str
|
2029
|
+
second: str
|
2030
|
+
|
2031
|
+
@override
|
2032
|
+
def __str__(self) -> str:
|
2033
|
+
return f"DataFrame must contain exactly one column; got {self.first!r}, {self.second!r} and perhaps more"
|
2034
|
+
|
2035
|
+
|
2036
|
+
##
|
2037
|
+
|
2038
|
+
|
1992
2039
|
@overload
|
1993
2040
|
def order_of_magnitude(column: ExprLike, /, *, round_: bool = False) -> Expr: ...
|
1994
2041
|
@overload
|
@@ -2110,13 +2157,10 @@ def reify_exprs(
|
|
2110
2157
|
.with_columns(*all_exprs)
|
2111
2158
|
.drop("_index")
|
2112
2159
|
)
|
2113
|
-
|
2114
|
-
|
2115
|
-
|
2116
|
-
|
2117
|
-
return df[one(df.columns)]
|
2118
|
-
case _:
|
2119
|
-
return df
|
2160
|
+
try:
|
2161
|
+
return one_column(df)
|
2162
|
+
except OneColumnNonUniqueError:
|
2163
|
+
return df
|
2120
2164
|
|
2121
2165
|
|
2122
2166
|
@dataclass(kw_only=True, slots=True)
|
@@ -2519,6 +2563,9 @@ __all__ = [
|
|
2519
2563
|
"InsertBeforeError",
|
2520
2564
|
"InsertBetweenError",
|
2521
2565
|
"IsNearEventError",
|
2566
|
+
"OneColumnEmptyError",
|
2567
|
+
"OneColumnError",
|
2568
|
+
"OneColumnNonUniqueError",
|
2522
2569
|
"SetFirstRowAsColumnsError",
|
2523
2570
|
"TimePeriodDType",
|
2524
2571
|
"acf",
|
@@ -2533,7 +2580,6 @@ __all__ = [
|
|
2533
2580
|
"boolean_value_counts",
|
2534
2581
|
"check_polars_dataframe",
|
2535
2582
|
"choice",
|
2536
|
-
"collect_series",
|
2537
2583
|
"columns_to_dict",
|
2538
2584
|
"concat_series",
|
2539
2585
|
"convert_time_zone",
|
@@ -2545,7 +2591,9 @@ __all__ = [
|
|
2545
2591
|
"ensure_data_type",
|
2546
2592
|
"ensure_expr_or_series",
|
2547
2593
|
"ensure_expr_or_series_many",
|
2594
|
+
"expr_to_series",
|
2548
2595
|
"finite_ewm_mean",
|
2596
|
+
"first_true_horizontal",
|
2549
2597
|
"get_data_type_or_series_time_zone",
|
2550
2598
|
"get_expr_name",
|
2551
2599
|
"get_frequency_spectrum",
|
@@ -2565,6 +2613,7 @@ __all__ = [
|
|
2565
2613
|
"nan_sum_cols",
|
2566
2614
|
"normal",
|
2567
2615
|
"offset_datetime",
|
2616
|
+
"one_column",
|
2568
2617
|
"order_of_magnitude",
|
2569
2618
|
"period_range",
|
2570
2619
|
"read_dataframe",
|
@@ -91,9 +91,7 @@ class PolarsRegressionFixture:
|
|
91
91
|
def check(self, obj: Series | DataFrame, /, *, suffix: str | None = None) -> None:
|
92
92
|
"""Check the Series/DataFrame summary against the baseline."""
|
93
93
|
from polars import DataFrame, Series, col
|
94
|
-
from polars.exceptions import
|
95
|
-
InvalidOperationError, # pyright: ignore[reportAttributeAccessIssue]
|
96
|
-
)
|
94
|
+
from polars.exceptions import InvalidOperationError
|
97
95
|
|
98
96
|
data: StrMapping = {
|
99
97
|
"describe": obj.describe(percentiles=[i / 10 for i in range(1, 10)]).rows(
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/modules/package_missing/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/modules/package_missing/module.py
RENAMED
File without changes
|
{dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/modules/package_with/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/modules/package_without/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/src/tests/modules/package_without/module_1.py
RENAMED
File without changes
|
{dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/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
|
{dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/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.159.0 → dycw_utilities-0.159.2}/src/utilities/pytest_plugins/pytest_randomly.py
RENAMED
File without changes
|
{dycw_utilities-0.159.0 → dycw_utilities-0.159.2}/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
|