dycw-utilities 0.109.9__tar.gz → 0.109.11__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.109.9 → dycw_utilities-0.109.11}/PKG-INFO +1 -1
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/pyproject.toml +4 -2
- dycw_utilities-0.109.11/src/tests/test_polars_ols.py +103 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/__init__.py +1 -1
- dycw_utilities-0.109.11/src/utilities/polars_ols.py +71 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/.gitignore +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/LICENSE +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/README.md +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/__init__.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/conftest.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/modules/__init__.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/modules/package_missing/__init__.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/modules/package_missing/module.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/modules/package_with/__init__.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/modules/package_with/outer_1.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/modules/package_with/outer_2.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/modules/package_without/__init__.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/modules/package_without/module_1.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/modules/package_without/module_2.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/modules/standalone.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/modules/with_imports.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/scripts/__init__.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/scripts/test_async_service/__init__.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/scripts/test_async_service/__main__.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/scripts/test_async_service/run.sh +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/scripts/test_queue_processor/__init__.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/scripts/test_queue_processor/__main__.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/scripts/test_queue_processor/run.sh +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_altair.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_astor.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_asyncio.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_atomicwrites.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_atools.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_cachetools.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_click.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_concurrent.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_contextlib.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_contextvars.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_cryptography.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_cvxpy.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_dataclasses.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_datetime.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_enum.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_errors.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_eventkit.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_fastapi.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_fpdf2.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_functions.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_functools.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_getpass.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_git.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_hashlib.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_http.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_hypothesis.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_ipython.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_iterables.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_jupyter.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_logging.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_loguru.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_luigi.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_math.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_memory_profiler.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_modules.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_more_itertools.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_numpy.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_operator.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_optuna.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_orjson.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_os.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_parse.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_pathlib.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_period.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_pickle.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_platform.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_polars.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_pqdm.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_pydantic.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_pyinstrument.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_pyrsistent.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_pytest.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_pytest_regressions.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_python_dotenv.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_random.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_re.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_redis.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_reprlib.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_rich.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_scipy.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_sentinel.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_shelve.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_slack_sdk.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_socket.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_sqlalchemy.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_streamlit.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_sys.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_tempfile.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_tenacity.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_text.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_threading.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_timer.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_traceback.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_traceback_funcs/__init__.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_traceback_funcs/chain.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_traceback_funcs/decorated_async.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_traceback_funcs/decorated_sync.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_traceback_funcs/error_bind.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_traceback_funcs/many.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_traceback_funcs/one.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_traceback_funcs/recursive.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_traceback_funcs/task_group_one.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_traceback_funcs/task_group_two.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_traceback_funcs/two.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_traceback_funcs/untraced.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_types.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_typing.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_typing_funcs/__init__.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_typing_funcs/no_future.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_typing_funcs/with_future.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_tzdata.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_tzlocal.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_uuid.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_version.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_warnings.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_whenever.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_zipfile.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_zoneinfo.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/altair.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/astor.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/asyncio.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/atomicwrites.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/atools.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/cachetools.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/click.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/concurrent.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/contextlib.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/contextvars.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/cryptography.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/cvxpy.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/dataclasses.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/datetime.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/enum.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/errors.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/eventkit.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/fastapi.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/fpdf2.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/functions.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/functools.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/getpass.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/git.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/hashlib.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/http.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/hypothesis.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/ipython.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/iterables.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/jupyter.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/logging.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/loguru.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/luigi.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/math.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/memory_profiler.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/modules.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/more_itertools.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/numpy.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/operator.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/optuna.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/orjson.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/os.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/parse.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/pathlib.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/period.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/pickle.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/platform.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/polars.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/pqdm.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/py.typed +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/pydantic.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/pyinstrument.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/pyrsistent.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/pytest.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/pytest_regressions.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/python_dotenv.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/random.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/re.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/redis.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/reprlib.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/rich.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/scipy.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/sentinel.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/shelve.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/slack_sdk.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/socket.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/sqlalchemy.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/streamlit.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/sys.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/tempfile.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/tenacity.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/text.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/threading.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/timer.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/traceback.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/types.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/typing.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/tzdata.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/tzlocal.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/uuid.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/version.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/warnings.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/whenever.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/zipfile.py +0 -0
- {dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/utilities/zoneinfo.py +0 -0
@@ -40,6 +40,7 @@ dev = [
|
|
40
40
|
"orjson >= 3.10.16, < 3.11",
|
41
41
|
"pathvalidate >= 3.2.3, < 3.3",
|
42
42
|
"polars-lts-cpu >= 1.27.1, < 1.28",
|
43
|
+
"polars-ols >= 0.3.5, < 0.4",
|
43
44
|
"pqdm >= 0.2.0, < 0.3",
|
44
45
|
"psycopg2-binary >= 2.9.10, < 2.10", # for sqlalchemy
|
45
46
|
"pydantic >= 2.11.2, < 2.12",
|
@@ -50,6 +51,7 @@ dev = [
|
|
50
51
|
"python-dotenv >= 1.1.0, < 1.2",
|
51
52
|
"redis >= 5.2.1, < 5.3",
|
52
53
|
"rich >= 14.0.0, < 14.1",
|
54
|
+
"scikit-learn >= 1.6.1, < 1.7",
|
53
55
|
"scipy >= 1.15.2, < 1.16",
|
54
56
|
"slack-sdk >= 3.35.0, < 3.36",
|
55
57
|
"sqlalchemy >= 2.0.40, < 2.1",
|
@@ -89,7 +91,7 @@ dependencies = [
|
|
89
91
|
name = "dycw-utilities"
|
90
92
|
readme = "README.md"
|
91
93
|
requires-python = ">= 3.12"
|
92
|
-
version = "0.109.
|
94
|
+
version = "0.109.11"
|
93
95
|
|
94
96
|
[project.optional-dependencies]
|
95
97
|
test = [
|
@@ -332,7 +334,7 @@ zzz-test-zoneinfo = [
|
|
332
334
|
# bump-my-version
|
333
335
|
[tool.bumpversion]
|
334
336
|
allow_dirty = true
|
335
|
-
current_version = "0.109.
|
337
|
+
current_version = "0.109.11"
|
336
338
|
|
337
339
|
[[tool.bumpversion.files]]
|
338
340
|
filename = "src/utilities/__init__.py"
|
@@ -0,0 +1,103 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
3
|
+
from hypothesis import given
|
4
|
+
from hypothesis.strategies import sampled_from
|
5
|
+
from numpy import isclose
|
6
|
+
from polars import DataFrame, Float64, Struct, UInt32, col
|
7
|
+
from polars.testing import assert_frame_equal
|
8
|
+
from sklearn.linear_model import LinearRegression
|
9
|
+
|
10
|
+
from utilities.polars import concat_series, integers, normal
|
11
|
+
from utilities.polars_ols import compute_rolling_ols
|
12
|
+
|
13
|
+
|
14
|
+
class TestComputeRollingOLS:
|
15
|
+
def test_ols_results(self) -> None:
|
16
|
+
result = self._df["ols"].struct.unnest().with_row_index()
|
17
|
+
# fmt: off
|
18
|
+
exp_values = [
|
19
|
+
(10, {"x1": 0.333396198442681, "x2": 0.6845517746145712, "const": 0.2808021232120448}, 59.921571424913495, 1.67032007883995, 0.9955364659986504),
|
20
|
+
(11, {"x1": 0.322785525889542, "x2": 0.6896341527044252, "const": 0.5401793852579858}, 15.974446064929626, -0.3429678871268038, 0.9961762567103958),
|
21
|
+
(12, {"x1": 0.31042868991153927, "x2": 0.7055685710743383, "const": 1.145326562525439}, -31.310827706894123, -0.45191863996575066, 0.998022262986332),
|
22
|
+
(13, {"x1": 0.33311466967931097, "x2": 0.684137842579758, "const": -0.7961518480794516}, 50.66821598287034, -2.975371834066671, 0.9974533939791341),
|
23
|
+
(14, {"x1": 0.35299385150914864, "x2": 0.6758890569593843, "const": -0.9377907849336107}, -0.8749325340834626, 1.0581261048863142, 0.9973453833170313),
|
24
|
+
(15, {"x1": 0.351300641938209, "x2": 0.6456834722890913, "const": -1.859577387752822}, 1.6809655259738476, 0.3217076349681922, 0.9951571413022856),
|
25
|
+
(16, {"x1": 0.3583378199895871, "x2": 0.6588347796692774, "const": -1.109675446287481}, 26.65448170418155, 2.496480675700724, 0.9933751737130443),
|
26
|
+
(17, {"x1": 0.36195632084801765, "x2": 0.658322951215466, "const": -1.3860237983291754}, 7.43453332939416, -0.791818995629618, 0.9905085882663488),
|
27
|
+
(18, {"x1": 0.35564162435283225, "x2": 0.6656931556738634, "const": -0.562680573000551}, -51.90315462605006, 0.6592474497562932, 0.9973576833556038),
|
28
|
+
(19, {"x1": 0.3100421300754357, "x2": 0.675357816881863, "const": 0.48493124625501927}, -36.70039604095908, -0.6071841038068868, 0.9978541580643828),
|
29
|
+
]
|
30
|
+
# fmt: on
|
31
|
+
expected = DataFrame(
|
32
|
+
data=exp_values,
|
33
|
+
schema={
|
34
|
+
"index": UInt32,
|
35
|
+
"coefficients": Struct({
|
36
|
+
"x1": Float64,
|
37
|
+
"x2": Float64,
|
38
|
+
"const": Float64,
|
39
|
+
}),
|
40
|
+
"predictions": Float64,
|
41
|
+
"residuals": Float64,
|
42
|
+
"R2": Float64,
|
43
|
+
},
|
44
|
+
orient="row",
|
45
|
+
)
|
46
|
+
assert_frame_equal(result[-10:], expected)
|
47
|
+
|
48
|
+
@given(
|
49
|
+
case=sampled_from([
|
50
|
+
(
|
51
|
+
slice(-7, -2),
|
52
|
+
[0.3619563208480195, 0.6583229512154678],
|
53
|
+
-1.386023798329262,
|
54
|
+
7.434533329394103,
|
55
|
+
0.994253238813284,
|
56
|
+
),
|
57
|
+
(
|
58
|
+
slice(-6, -1),
|
59
|
+
[0.35564162435283264, 0.6656931556738643],
|
60
|
+
-0.5626805730005437,
|
61
|
+
-51.903154626050124,
|
62
|
+
0.9979752966843768,
|
63
|
+
),
|
64
|
+
(
|
65
|
+
slice(-5, None),
|
66
|
+
[0.3100421300754358, 0.6753578168818635],
|
67
|
+
0.48493124625502837,
|
68
|
+
-36.70039604095908,
|
69
|
+
0.9977272526713715,
|
70
|
+
),
|
71
|
+
])
|
72
|
+
)
|
73
|
+
def test_tail(
|
74
|
+
self, *, case: tuple[slice, list[float], float, float, float]
|
75
|
+
) -> None:
|
76
|
+
slice_, coeffs, intercept, prediction, r2 = case
|
77
|
+
df = self._df[slice_]
|
78
|
+
X = df.select("x1", "x2").to_numpy() # noqa: N806
|
79
|
+
y = df.select("y").to_numpy()
|
80
|
+
model = LinearRegression()
|
81
|
+
model = model.fit(X, y)
|
82
|
+
assert isclose(model.coef_, coeffs).all()
|
83
|
+
assert isclose(model.intercept_, intercept)
|
84
|
+
assert isclose(model.predict(X)[-1], prediction).all()
|
85
|
+
assert isclose(model.score(X, y), r2)
|
86
|
+
|
87
|
+
@property
|
88
|
+
def _df(self) -> DataFrame:
|
89
|
+
n = 20
|
90
|
+
return (
|
91
|
+
concat_series(
|
92
|
+
integers(n, -100, high=100, seed=0).alias("x1"),
|
93
|
+
integers(n, -100, high=100, seed=1).alias("x2"),
|
94
|
+
)
|
95
|
+
.with_columns(
|
96
|
+
y=(col("x1") + 2 * col("x2") + normal(n, scale=10.0, seed=2)) / 3
|
97
|
+
)
|
98
|
+
.with_columns(
|
99
|
+
compute_rolling_ols(
|
100
|
+
"y", "x1", "x2", window_size=5, min_periods=5, add_intercept=True
|
101
|
+
)
|
102
|
+
)
|
103
|
+
)
|
@@ -0,0 +1,71 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
3
|
+
from typing import TYPE_CHECKING
|
4
|
+
|
5
|
+
from polars import struct
|
6
|
+
from polars_ols import RollingKwargs, compute_rolling_least_squares
|
7
|
+
|
8
|
+
from utilities.polars import ensure_expr_or_series
|
9
|
+
|
10
|
+
if TYPE_CHECKING:
|
11
|
+
from polars import Expr
|
12
|
+
from polars_ols import NullPolicy
|
13
|
+
|
14
|
+
from utilities.polars import ExprLike
|
15
|
+
|
16
|
+
|
17
|
+
def compute_rolling_ols(
|
18
|
+
target: ExprLike,
|
19
|
+
*features: ExprLike,
|
20
|
+
sample_weights: ExprLike | None = None,
|
21
|
+
add_intercept: bool = False,
|
22
|
+
null_policy: NullPolicy = "drop_window",
|
23
|
+
window_size: int = 1000000,
|
24
|
+
min_periods: int | None = None,
|
25
|
+
use_woodbury: bool | None = None,
|
26
|
+
alpha: float | None = None,
|
27
|
+
) -> Expr:
|
28
|
+
"""Compute a rolling OLS."""
|
29
|
+
target = ensure_expr_or_series(target)
|
30
|
+
rolling_kwargs = RollingKwargs(
|
31
|
+
null_policy=null_policy,
|
32
|
+
window_size=window_size,
|
33
|
+
min_periods=min_periods,
|
34
|
+
use_woodbury=use_woodbury,
|
35
|
+
alpha=alpha,
|
36
|
+
)
|
37
|
+
coefficients = compute_rolling_least_squares(
|
38
|
+
target,
|
39
|
+
*features,
|
40
|
+
sample_weights=sample_weights,
|
41
|
+
add_intercept=add_intercept,
|
42
|
+
mode="coefficients",
|
43
|
+
rolling_kwargs=rolling_kwargs,
|
44
|
+
).alias("coefficients")
|
45
|
+
predictions = compute_rolling_least_squares(
|
46
|
+
target,
|
47
|
+
*features,
|
48
|
+
sample_weights=sample_weights,
|
49
|
+
add_intercept=add_intercept,
|
50
|
+
mode="predictions",
|
51
|
+
rolling_kwargs=rolling_kwargs,
|
52
|
+
).alias("predictions")
|
53
|
+
residuals = compute_rolling_least_squares(
|
54
|
+
target,
|
55
|
+
*features,
|
56
|
+
sample_weights=sample_weights,
|
57
|
+
add_intercept=add_intercept,
|
58
|
+
mode="residuals",
|
59
|
+
rolling_kwargs=rolling_kwargs,
|
60
|
+
).alias("residuals")
|
61
|
+
ssr = (residuals**2).rolling_sum(window_size, min_samples=min_periods).alias("SSR")
|
62
|
+
sst = (
|
63
|
+
((target - target.rolling_mean(window_size, min_samples=min_periods)) ** 2)
|
64
|
+
.rolling_sum(window_size, min_samples=min_periods)
|
65
|
+
.alias("SST")
|
66
|
+
)
|
67
|
+
r2 = (1 - ssr / sst).alias("R2")
|
68
|
+
return struct(coefficients, predictions, residuals, r2).alias("ols")
|
69
|
+
|
70
|
+
|
71
|
+
__all__ = ["compute_rolling_ols"]
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/modules/package_missing/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/modules/package_missing/module.py
RENAMED
File without changes
|
{dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/modules/package_with/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/modules/package_with/outer_1.py
RENAMED
File without changes
|
{dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/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.109.9 → dycw_utilities-0.109.11}/src/tests/modules/package_without/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/modules/package_without/module_1.py
RENAMED
File without changes
|
{dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/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
|
{dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/scripts/test_async_service/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/scripts/test_async_service/__main__.py
RENAMED
File without changes
|
{dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/scripts/test_async_service/run.sh
RENAMED
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/scripts/test_queue_processor/run.sh
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
|
{dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_traceback_funcs/__init__.py
RENAMED
File without changes
|
File without changes
|
{dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_traceback_funcs/decorated_async.py
RENAMED
File without changes
|
{dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_traceback_funcs/decorated_sync.py
RENAMED
File without changes
|
{dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_traceback_funcs/error_bind.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_traceback_funcs/recursive.py
RENAMED
File without changes
|
{dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_traceback_funcs/task_group_one.py
RENAMED
File without changes
|
{dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_traceback_funcs/task_group_two.py
RENAMED
File without changes
|
File without changes
|
{dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/src/tests/test_traceback_funcs/untraced.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.109.9 → dycw_utilities-0.109.11}/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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|