dycw-utilities 0.159.7__tar.gz → 0.160.0__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.7 → dycw_utilities-0.160.0}/PKG-INFO +1 -1
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/pyproject.toml +2 -2
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_polars.py +56 -25
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/__init__.py +1 -1
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/polars.py +37 -32
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/.gitignore +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/LICENSE +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/README.md +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/__init__.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/conftest.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/modules/__init__.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/modules/package_missing/__init__.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/modules/package_missing/module.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/modules/package_with/__init__.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/modules/package_with/outer_1.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/modules/package_with/outer_2.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/modules/package_without/__init__.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/modules/package_without/module_1.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/modules/package_without/module_2.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/modules/standalone.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/modules/with_imports.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_altair.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_asyncio.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_atomicwrites.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_atools.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_cachetools.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_click.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_concurrent.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_contextlib.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_contextvars.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_cryptography.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_cvxpy.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_dataclasses.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_enum.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_errors.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_eventkit.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_fastapi.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_fpdf2.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_functions.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_functools.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_getpass.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_gzip.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_hashlib.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_http.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_hypothesis.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_importlib.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_inflect.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_ipython.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_iterables.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_json.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_jupyter.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_libcst.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_lightweight_charts.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_logging.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_math.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_memory_profiler.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_modules.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_more_itertools.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_numpy.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_objects/__init__.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_objects/objects.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_operator.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_optuna.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_orjson.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_os.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_parse.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_pathlib.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_pickle.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_platform.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_polars_ols.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_postgres.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_pottery.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_pqdm.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_psutil.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_pyinstrument.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_pytest.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_pytest_randomly.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_pytest_regressions.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_random.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_re.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_redis.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_reprlib.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_scipy.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_sentinel.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_shelve.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_slack_sdk.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_socket.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_sqlalchemy.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_statsmodels.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_string.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_tempfile.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_text.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_threading.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_timer.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_traceback.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_typed_settings.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_types.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_typing.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_typing_funcs/__init__.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_typing_funcs/no_future.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_typing_funcs/with_future.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_tzdata.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_tzlocal.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_uuid.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_version.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_warnings.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_whenever.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_zipfile.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/test_zoneinfo.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/altair.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/asyncio.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/atomicwrites.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/atools.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/cachetools.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/click.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/concurrent.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/contextlib.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/contextvars.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/cryptography.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/cvxpy.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/dataclasses.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/enum.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/errors.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/eventkit.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/fastapi.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/fpdf2.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/functions.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/functools.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/getpass.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/gzip.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/hashlib.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/http.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/hypothesis.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/importlib.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/inflect.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/ipython.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/iterables.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/json.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/jupyter.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/libcst.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/lightweight_charts.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/logging.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/math.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/memory_profiler.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/modules.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/more_itertools.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/numpy.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/operator.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/optuna.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/orjson.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/os.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/parse.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/pathlib.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/pickle.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/platform.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/polars_ols.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/postgres.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/pottery.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/pqdm.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/psutil.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/py.typed +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/pyinstrument.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/pytest.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/pytest_plugins/__init__.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/pytest_plugins/pytest_randomly.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/pytest_plugins/pytest_regressions.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/pytest_regressions.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/random.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/re.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/redis.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/reprlib.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/scipy.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/sentinel.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/shelve.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/slack_sdk.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/socket.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/sqlalchemy.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/statsmodels.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/string.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/tempfile.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/text.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/threading.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/timer.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/traceback.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/typed_settings.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/types.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/typing.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/tzdata.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/tzlocal.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/uuid.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/version.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/warnings.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/whenever.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/zipfile.py +0 -0
- {dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/utilities/zoneinfo.py +0 -0
@@ -227,7 +227,7 @@ dependencies = [
|
|
227
227
|
name = "dycw-utilities"
|
228
228
|
readme = "README.md"
|
229
229
|
requires-python = ">= 3.12"
|
230
|
-
version = "0.
|
230
|
+
version = "0.160.0"
|
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.
|
262
|
+
current_version = "0.160.0"
|
263
263
|
|
264
264
|
[[tool.bumpversion.files]]
|
265
265
|
filename = "src/utilities/__init__.py"
|
@@ -98,6 +98,7 @@ from utilities.polars import (
|
|
98
98
|
OneColumnEmptyError,
|
99
99
|
OneColumnNonUniqueError,
|
100
100
|
RoundToFloatError,
|
101
|
+
SelectExactError,
|
101
102
|
SetFirstRowAsColumnsError,
|
102
103
|
TimePeriodDType,
|
103
104
|
_check_polars_dataframe_predicates,
|
@@ -179,7 +180,7 @@ from utilities.polars import (
|
|
179
180
|
join_into_periods,
|
180
181
|
map_over_columns,
|
181
182
|
nan_sum_agg,
|
182
|
-
|
183
|
+
nan_sum_horizonal,
|
183
184
|
normal,
|
184
185
|
number_of_decimals,
|
185
186
|
offset_datetime,
|
@@ -191,6 +192,7 @@ from utilities.polars import (
|
|
191
192
|
reify_exprs,
|
192
193
|
replace_time_zone,
|
193
194
|
round_to_float,
|
195
|
+
select_exact,
|
194
196
|
serialize_dataframe,
|
195
197
|
serialize_series,
|
196
198
|
set_first_row_as_columns,
|
@@ -1561,16 +1563,16 @@ class TestFiniteEWMWeights:
|
|
1561
1563
|
|
1562
1564
|
class TestFirstTrueHorizontal:
|
1563
1565
|
@mark.parametrize(
|
1564
|
-
("
|
1566
|
+
("x", "y", "z", "expected"),
|
1565
1567
|
[
|
1566
|
-
param(
|
1567
|
-
param(
|
1568
|
-
param(
|
1569
|
-
param(
|
1568
|
+
param(True, True, True, 0),
|
1569
|
+
param(False, True, True, 1),
|
1570
|
+
param(False, False, True, 2),
|
1571
|
+
param(False, False, False, None),
|
1570
1572
|
],
|
1571
1573
|
)
|
1572
|
-
def test_main(self, *,
|
1573
|
-
series = [Series(values=[
|
1574
|
+
def test_main(self, *, x: bool, y: bool, z: bool, expected: int | None) -> None:
|
1575
|
+
series = [Series(values=[i], dtype=Boolean) for i in [x, y, z]]
|
1574
1576
|
result = first_true_horizontal(*series)
|
1575
1577
|
assert result.item() == expected
|
1576
1578
|
|
@@ -2186,26 +2188,22 @@ class TestNanSumAgg:
|
|
2186
2188
|
assert result["value"].item() == expected
|
2187
2189
|
|
2188
2190
|
|
2189
|
-
class
|
2190
|
-
@
|
2191
|
-
|
2192
|
-
|
2193
|
-
|
2191
|
+
class TestNanSumHorizontal:
|
2192
|
+
@mark.parametrize(
|
2193
|
+
("x", "y", "z", "expected"),
|
2194
|
+
[
|
2195
|
+
param(1, 2, 3, 6),
|
2196
|
+
param(None, 2, 3, 5),
|
2197
|
+
param(None, None, 3, 3),
|
2198
|
+
param(None, None, None, None),
|
2199
|
+
],
|
2194
2200
|
)
|
2195
2201
|
def test_main(
|
2196
|
-
self,
|
2197
|
-
*,
|
2198
|
-
case: tuple[int | None, int | None, int | None],
|
2199
|
-
x_kind: Literal["str", "column"],
|
2200
|
-
y_kind: Literal["str", "column"],
|
2202
|
+
self, *, x: int | None, y: int | None, z: int | None, expected: int | None
|
2201
2203
|
) -> None:
|
2202
|
-
x, y,
|
2203
|
-
|
2204
|
-
|
2205
|
-
df = DataFrame(
|
2206
|
-
data=[(x, y)], schema={"x": Int64, "y": Int64}, orient="row"
|
2207
|
-
).with_columns(z=nan_sum_cols(x_use, y_use))
|
2208
|
-
assert df["z"].item() == expected
|
2204
|
+
series = [Series(values=[i], dtype=Int64) for i in [x, y, z]]
|
2205
|
+
result = nan_sum_horizonal(*series)
|
2206
|
+
assert result.item() == expected
|
2209
2207
|
|
2210
2208
|
|
2211
2209
|
class TestNormal:
|
@@ -2467,6 +2465,39 @@ class TestRoundToFloat:
|
|
2467
2465
|
_ = round_to_float(cast("Any", x), cast("Any", y))
|
2468
2466
|
|
2469
2467
|
|
2468
|
+
class TestSelectExact:
|
2469
|
+
df: ClassVar[DataFrame] = DataFrame(
|
2470
|
+
data=[(True, False), (False, None), (None, True)],
|
2471
|
+
schema={"x": Boolean, "y": Boolean},
|
2472
|
+
orient="row",
|
2473
|
+
)
|
2474
|
+
|
2475
|
+
def test_adding_and_reordering(self) -> None:
|
2476
|
+
df = select_exact(self.df, "y", ~col.x.alias("z"), "x")
|
2477
|
+
expected = DataFrame(
|
2478
|
+
data=[(False, False, True), (None, True, False), (True, None, None)],
|
2479
|
+
schema={"y": Boolean, "z": Boolean, "x": Boolean},
|
2480
|
+
orient="row",
|
2481
|
+
)
|
2482
|
+
assert_frame_equal(df, expected)
|
2483
|
+
|
2484
|
+
def test_adding_and_dropping(self) -> None:
|
2485
|
+
df = select_exact(self.df, "y", ~col.x.alias("z"), drop="x")
|
2486
|
+
expected = DataFrame(
|
2487
|
+
data=[(False, False), (None, True), (True, None)],
|
2488
|
+
schema={"y": Boolean, "z": Boolean},
|
2489
|
+
orient="row",
|
2490
|
+
)
|
2491
|
+
assert_frame_equal(df, expected)
|
2492
|
+
|
2493
|
+
def test_error(self) -> None:
|
2494
|
+
with raises(
|
2495
|
+
SelectExactError,
|
2496
|
+
match=r"All columns must be selected; got \['y'\] remaining",
|
2497
|
+
):
|
2498
|
+
_ = select_exact(self.df, ~col.x.alias("z"), "x")
|
2499
|
+
|
2500
|
+
|
2470
2501
|
class TestSerializeAndDeserializeDataFrame:
|
2471
2502
|
cases: ClassVar[list[tuple[PolarsDataType, SearchStrategy[Any]]]] = [
|
2472
2503
|
(Boolean, booleans()),
|
@@ -1325,18 +1325,6 @@ class _FiniteEWMWeightsError(Exception):
|
|
1325
1325
|
##
|
1326
1326
|
|
1327
1327
|
|
1328
|
-
@overload
|
1329
|
-
def first_true_horizontal(column: Series, /) -> Series: ...
|
1330
|
-
@overload
|
1331
|
-
def first_true_horizontal(column1: Series, column2: Series, /) -> Series: ...
|
1332
|
-
@overload
|
1333
|
-
def first_true_horizontal(
|
1334
|
-
column1: Series, column2: Series, column3: Series, /
|
1335
|
-
) -> Series: ...
|
1336
|
-
@overload
|
1337
|
-
def first_true_horizontal(
|
1338
|
-
column1: Series, column2: Series, column3: Series, column4: Series, /
|
1339
|
-
) -> Series: ...
|
1340
1328
|
@overload
|
1341
1329
|
def first_true_horizontal(*columns: Series) -> Series: ...
|
1342
1330
|
@overload
|
@@ -1931,27 +1919,17 @@ def nan_sum_agg(column: str | Expr, /, *, dtype: PolarsDataType | None = None) -
|
|
1931
1919
|
##
|
1932
1920
|
|
1933
1921
|
|
1934
|
-
|
1935
|
-
|
1936
|
-
|
1922
|
+
@overload
|
1923
|
+
def nan_sum_horizonal(*columns: Series) -> Series: ...
|
1924
|
+
@overload
|
1925
|
+
def nan_sum_horizonal(*columns: IntoExprColumn) -> ExprOrSeries: ...
|
1926
|
+
def nan_sum_horizonal(*columns: IntoExprColumn) -> ExprOrSeries:
|
1937
1927
|
"""Nan sum across columns."""
|
1938
|
-
|
1939
|
-
|
1940
|
-
|
1928
|
+
columns2 = ensure_expr_or_series_many(*columns)
|
1929
|
+
expr = when(any_horizontal(*(c.is_not_null() for c in columns2))).then(
|
1930
|
+
sum_horizontal(*columns2)
|
1941
1931
|
)
|
1942
|
-
|
1943
|
-
def func(x: Expr, y: Expr, /) -> Expr:
|
1944
|
-
return (
|
1945
|
-
when(x.is_not_null() & y.is_not_null())
|
1946
|
-
.then(x + y)
|
1947
|
-
.when(x.is_not_null() & y.is_null())
|
1948
|
-
.then(x)
|
1949
|
-
.when(x.is_null() & y.is_not_null())
|
1950
|
-
.then(y)
|
1951
|
-
.otherwise(lit(None, dtype=dtype))
|
1952
|
-
)
|
1953
|
-
|
1954
|
-
return reduce(func, all_exprs)
|
1932
|
+
return try_reify_expr(expr, *columns2)
|
1955
1933
|
|
1956
1934
|
|
1957
1935
|
##
|
@@ -2446,6 +2424,31 @@ class RoundToFloatError(Exception):
|
|
2446
2424
|
##
|
2447
2425
|
|
2448
2426
|
|
2427
|
+
def select_exact(
|
2428
|
+
df: DataFrame, /, *columns: IntoExprColumn, drop: MaybeIterable[str] | None = None
|
2429
|
+
) -> DataFrame:
|
2430
|
+
"""Select an exact set of columns from a DataFrame."""
|
2431
|
+
names = [get_expr_name(df, c) for c in columns]
|
2432
|
+
drop = set() if drop is None else set(always_iterable(drop))
|
2433
|
+
union = set(names) | drop
|
2434
|
+
extra = [c for c in df.columns if c not in union]
|
2435
|
+
if len(extra) >= 1:
|
2436
|
+
raise SelectExactError(columns=extra)
|
2437
|
+
return df.select(*columns)
|
2438
|
+
|
2439
|
+
|
2440
|
+
@dataclass(kw_only=True, slots=True)
|
2441
|
+
class SelectExactError(Exception):
|
2442
|
+
columns: list[str]
|
2443
|
+
|
2444
|
+
@override
|
2445
|
+
def __str__(self) -> str:
|
2446
|
+
return f"All columns must be selected; got {get_repr(self.columns)} remaining"
|
2447
|
+
|
2448
|
+
|
2449
|
+
##
|
2450
|
+
|
2451
|
+
|
2449
2452
|
def set_first_row_as_columns(df: DataFrame, /) -> DataFrame:
|
2450
2453
|
"""Set the first row of a DataFrame as its columns."""
|
2451
2454
|
try:
|
@@ -2654,6 +2657,7 @@ __all__ = [
|
|
2654
2657
|
"OneColumnError",
|
2655
2658
|
"OneColumnNonUniqueError",
|
2656
2659
|
"RoundToFloatError",
|
2660
|
+
"SelectExactError",
|
2657
2661
|
"SetFirstRowAsColumnsError",
|
2658
2662
|
"TimePeriodDType",
|
2659
2663
|
"acf",
|
@@ -2698,7 +2702,7 @@ __all__ = [
|
|
2698
2702
|
"join_into_periods",
|
2699
2703
|
"map_over_columns",
|
2700
2704
|
"nan_sum_agg",
|
2701
|
-
"
|
2705
|
+
"nan_sum_horizonal",
|
2702
2706
|
"normal",
|
2703
2707
|
"number_of_decimals",
|
2704
2708
|
"offset_datetime",
|
@@ -2709,6 +2713,7 @@ __all__ = [
|
|
2709
2713
|
"read_series",
|
2710
2714
|
"replace_time_zone",
|
2711
2715
|
"round_to_float",
|
2716
|
+
"select_exact",
|
2712
2717
|
"serialize_dataframe",
|
2713
2718
|
"set_first_row_as_columns",
|
2714
2719
|
"struct_dtype",
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/modules/package_missing/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/modules/package_missing/module.py
RENAMED
File without changes
|
{dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/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.7 → dycw_utilities-0.160.0}/src/tests/modules/package_without/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/src/tests/modules/package_without/module_1.py
RENAMED
File without changes
|
{dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/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.7 → dycw_utilities-0.160.0}/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.7 → dycw_utilities-0.160.0}/src/utilities/pytest_plugins/pytest_randomly.py
RENAMED
File without changes
|
{dycw_utilities-0.159.7 → dycw_utilities-0.160.0}/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
|