dycw-utilities 0.109.9__py3-none-any.whl → 0.109.10__py3-none-any.whl

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.
@@ -1,9 +1,10 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dycw-utilities
3
- Version: 0.109.9
3
+ Version: 0.109.10
4
4
  Author-email: Derek Wan <d.wan@icloud.com>
5
5
  License-File: LICENSE
6
6
  Requires-Python: >=3.12
7
+ Requires-Dist: polars-ols>=0.3.5
7
8
  Requires-Dist: typing-extensions<4.14,>=4.13.1
8
9
  Provides-Extra: test
9
10
  Requires-Dist: hypothesis<6.132,>=6.131.6; extra == 'test'
@@ -1,4 +1,4 @@
1
- utilities/__init__.py,sha256=53_kiHhGqVZU7uWgI_AWTOmG7yG5Vbb_k-XsqiAMxyk,60
1
+ utilities/__init__.py,sha256=rSepLbrv6OLPYSa8JNcDoi9ph_2-kk82P4d1Ebs7rTE,61
2
2
  utilities/altair.py,sha256=NSyDsm8QlkAGmsGdxVwCkHnPxt_35yJBa9Lg7bz9Ays,9054
3
3
  utilities/astor.py,sha256=xuDUkjq0-b6fhtwjhbnebzbqQZAjMSHR1IIS5uOodVg,777
4
4
  utilities/asyncio.py,sha256=41oQUurWMvadFK5gFnaG21hMM0Vmfn2WS6OpC0R9mas,14757
@@ -46,6 +46,7 @@ utilities/period.py,sha256=ikHXsWtDLr553cfH6p9mMaiCnIAP69B7q84ckWV3HaA,10884
46
46
  utilities/pickle.py,sha256=Bhvd7cZl-zQKQDFjUerqGuSKlHvnW1K2QXeU5UZibtg,657
47
47
  utilities/platform.py,sha256=NU7ycTvAXAG-fdYmDXaM1m4EOml2cGiaYwaUzfzSqyU,1767
48
48
  utilities/polars.py,sha256=nB2pfK8N8HRpPE_tdbiTfFGLWC_TekAqgHlYDhnUzAM,52169
49
+ utilities/polars_ols.py,sha256=AQe3RFOMv8CEI_ZCoscb_-PxB4JWjO0TAEmk8DKLeaI,2138
49
50
  utilities/pqdm.py,sha256=foRytQybmOQ05pjt5LF7ANyzrIa--4ScDE3T2wd31a4,3118
50
51
  utilities/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
51
52
  utilities/pydantic.py,sha256=f6qtR5mO2YMuyvNmbaEj5YeD9eGA4YYfb7Bjzh9jUs0,1845
@@ -84,7 +85,7 @@ utilities/warnings.py,sha256=yUgjnmkCRf6QhdyAXzl7u0qQFejhQG3PrjoSwxpbHrs,1819
84
85
  utilities/whenever.py,sha256=TjoTAJ1R27-rKXiXzdE4GzPidmYqm0W58XydDXp-QZM,17786
85
86
  utilities/zipfile.py,sha256=24lQc9ATcJxHXBPc_tBDiJk48pWyRrlxO2fIsFxU0A8,699
86
87
  utilities/zoneinfo.py,sha256=-DQz5a0Ikw9jfSZtL0BEQkXOMC9yGn_xiJYNCLMiqEc,1989
87
- dycw_utilities-0.109.9.dist-info/METADATA,sha256=sh80SudoQ_j2lWexCpuls1seZsGjBvS7FlKhOLC6kIE,13004
88
- dycw_utilities-0.109.9.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
89
- dycw_utilities-0.109.9.dist-info/licenses/LICENSE,sha256=gppZp16M6nSVpBbUBrNL6JuYfvKwZiKgV7XoKKsHzqo,1066
90
- dycw_utilities-0.109.9.dist-info/RECORD,,
88
+ dycw_utilities-0.109.10.dist-info/METADATA,sha256=dn1-Yy6KJLMDkEyWztQtPMjCF7DKg5bjdo7wRbZA2oA,13038
89
+ dycw_utilities-0.109.10.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
90
+ dycw_utilities-0.109.10.dist-info/licenses/LICENSE,sha256=gppZp16M6nSVpBbUBrNL6JuYfvKwZiKgV7XoKKsHzqo,1066
91
+ dycw_utilities-0.109.10.dist-info/RECORD,,
utilities/__init__.py CHANGED
@@ -1,3 +1,3 @@
1
1
  from __future__ import annotations
2
2
 
3
- __version__ = "0.109.9"
3
+ __version__ = "0.109.10"
@@ -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"]