polars-runtime-compat 1.34.0b2__cp39-abi3-macosx_11_0_arm64.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.

Potentially problematic release.


This version of polars-runtime-compat might be problematic. Click here for more details.

Files changed (203) hide show
  1. _polars_runtime_compat/.gitkeep +0 -0
  2. _polars_runtime_compat/_polars_runtime_compat.abi3.so +0 -0
  3. polars/__init__.py +528 -0
  4. polars/_cpu_check.py +265 -0
  5. polars/_dependencies.py +355 -0
  6. polars/_plr.py +99 -0
  7. polars/_plr.pyi +2496 -0
  8. polars/_reexport.py +23 -0
  9. polars/_typing.py +478 -0
  10. polars/_utils/__init__.py +37 -0
  11. polars/_utils/async_.py +102 -0
  12. polars/_utils/cache.py +176 -0
  13. polars/_utils/cloud.py +40 -0
  14. polars/_utils/constants.py +29 -0
  15. polars/_utils/construction/__init__.py +46 -0
  16. polars/_utils/construction/dataframe.py +1397 -0
  17. polars/_utils/construction/other.py +72 -0
  18. polars/_utils/construction/series.py +560 -0
  19. polars/_utils/construction/utils.py +118 -0
  20. polars/_utils/convert.py +224 -0
  21. polars/_utils/deprecation.py +406 -0
  22. polars/_utils/getitem.py +457 -0
  23. polars/_utils/logging.py +11 -0
  24. polars/_utils/nest_asyncio.py +264 -0
  25. polars/_utils/parquet.py +15 -0
  26. polars/_utils/parse/__init__.py +12 -0
  27. polars/_utils/parse/expr.py +242 -0
  28. polars/_utils/polars_version.py +19 -0
  29. polars/_utils/pycapsule.py +53 -0
  30. polars/_utils/scan.py +27 -0
  31. polars/_utils/serde.py +63 -0
  32. polars/_utils/slice.py +215 -0
  33. polars/_utils/udfs.py +1251 -0
  34. polars/_utils/unstable.py +63 -0
  35. polars/_utils/various.py +782 -0
  36. polars/_utils/wrap.py +25 -0
  37. polars/api.py +370 -0
  38. polars/catalog/__init__.py +0 -0
  39. polars/catalog/unity/__init__.py +19 -0
  40. polars/catalog/unity/client.py +733 -0
  41. polars/catalog/unity/models.py +152 -0
  42. polars/config.py +1571 -0
  43. polars/convert/__init__.py +25 -0
  44. polars/convert/general.py +1046 -0
  45. polars/convert/normalize.py +261 -0
  46. polars/dataframe/__init__.py +5 -0
  47. polars/dataframe/_html.py +186 -0
  48. polars/dataframe/frame.py +12582 -0
  49. polars/dataframe/group_by.py +1067 -0
  50. polars/dataframe/plotting.py +257 -0
  51. polars/datatype_expr/__init__.py +5 -0
  52. polars/datatype_expr/array.py +56 -0
  53. polars/datatype_expr/datatype_expr.py +304 -0
  54. polars/datatype_expr/list.py +18 -0
  55. polars/datatype_expr/struct.py +69 -0
  56. polars/datatypes/__init__.py +122 -0
  57. polars/datatypes/_parse.py +195 -0
  58. polars/datatypes/_utils.py +48 -0
  59. polars/datatypes/classes.py +1213 -0
  60. polars/datatypes/constants.py +11 -0
  61. polars/datatypes/constructor.py +172 -0
  62. polars/datatypes/convert.py +366 -0
  63. polars/datatypes/group.py +130 -0
  64. polars/exceptions.py +230 -0
  65. polars/expr/__init__.py +7 -0
  66. polars/expr/array.py +964 -0
  67. polars/expr/binary.py +346 -0
  68. polars/expr/categorical.py +306 -0
  69. polars/expr/datetime.py +2620 -0
  70. polars/expr/expr.py +11272 -0
  71. polars/expr/list.py +1408 -0
  72. polars/expr/meta.py +444 -0
  73. polars/expr/name.py +321 -0
  74. polars/expr/string.py +3045 -0
  75. polars/expr/struct.py +357 -0
  76. polars/expr/whenthen.py +185 -0
  77. polars/functions/__init__.py +193 -0
  78. polars/functions/aggregation/__init__.py +33 -0
  79. polars/functions/aggregation/horizontal.py +298 -0
  80. polars/functions/aggregation/vertical.py +341 -0
  81. polars/functions/as_datatype.py +848 -0
  82. polars/functions/business.py +138 -0
  83. polars/functions/col.py +384 -0
  84. polars/functions/datatype.py +121 -0
  85. polars/functions/eager.py +524 -0
  86. polars/functions/escape_regex.py +29 -0
  87. polars/functions/lazy.py +2751 -0
  88. polars/functions/len.py +68 -0
  89. polars/functions/lit.py +210 -0
  90. polars/functions/random.py +22 -0
  91. polars/functions/range/__init__.py +19 -0
  92. polars/functions/range/_utils.py +15 -0
  93. polars/functions/range/date_range.py +303 -0
  94. polars/functions/range/datetime_range.py +370 -0
  95. polars/functions/range/int_range.py +348 -0
  96. polars/functions/range/linear_space.py +311 -0
  97. polars/functions/range/time_range.py +287 -0
  98. polars/functions/repeat.py +301 -0
  99. polars/functions/whenthen.py +353 -0
  100. polars/interchange/__init__.py +10 -0
  101. polars/interchange/buffer.py +77 -0
  102. polars/interchange/column.py +190 -0
  103. polars/interchange/dataframe.py +230 -0
  104. polars/interchange/from_dataframe.py +328 -0
  105. polars/interchange/protocol.py +303 -0
  106. polars/interchange/utils.py +170 -0
  107. polars/io/__init__.py +64 -0
  108. polars/io/_utils.py +317 -0
  109. polars/io/avro.py +49 -0
  110. polars/io/clipboard.py +36 -0
  111. polars/io/cloud/__init__.py +17 -0
  112. polars/io/cloud/_utils.py +80 -0
  113. polars/io/cloud/credential_provider/__init__.py +17 -0
  114. polars/io/cloud/credential_provider/_builder.py +520 -0
  115. polars/io/cloud/credential_provider/_providers.py +618 -0
  116. polars/io/csv/__init__.py +9 -0
  117. polars/io/csv/_utils.py +38 -0
  118. polars/io/csv/batched_reader.py +142 -0
  119. polars/io/csv/functions.py +1495 -0
  120. polars/io/database/__init__.py +6 -0
  121. polars/io/database/_arrow_registry.py +70 -0
  122. polars/io/database/_cursor_proxies.py +147 -0
  123. polars/io/database/_executor.py +578 -0
  124. polars/io/database/_inference.py +314 -0
  125. polars/io/database/_utils.py +144 -0
  126. polars/io/database/functions.py +516 -0
  127. polars/io/delta.py +499 -0
  128. polars/io/iceberg/__init__.py +3 -0
  129. polars/io/iceberg/_utils.py +697 -0
  130. polars/io/iceberg/dataset.py +556 -0
  131. polars/io/iceberg/functions.py +151 -0
  132. polars/io/ipc/__init__.py +8 -0
  133. polars/io/ipc/functions.py +514 -0
  134. polars/io/json/__init__.py +3 -0
  135. polars/io/json/read.py +101 -0
  136. polars/io/ndjson.py +332 -0
  137. polars/io/parquet/__init__.py +17 -0
  138. polars/io/parquet/field_overwrites.py +140 -0
  139. polars/io/parquet/functions.py +722 -0
  140. polars/io/partition.py +491 -0
  141. polars/io/plugins.py +187 -0
  142. polars/io/pyarrow_dataset/__init__.py +5 -0
  143. polars/io/pyarrow_dataset/anonymous_scan.py +109 -0
  144. polars/io/pyarrow_dataset/functions.py +79 -0
  145. polars/io/scan_options/__init__.py +5 -0
  146. polars/io/scan_options/_options.py +59 -0
  147. polars/io/scan_options/cast_options.py +126 -0
  148. polars/io/spreadsheet/__init__.py +6 -0
  149. polars/io/spreadsheet/_utils.py +52 -0
  150. polars/io/spreadsheet/_write_utils.py +647 -0
  151. polars/io/spreadsheet/functions.py +1323 -0
  152. polars/lazyframe/__init__.py +9 -0
  153. polars/lazyframe/engine_config.py +61 -0
  154. polars/lazyframe/frame.py +8564 -0
  155. polars/lazyframe/group_by.py +669 -0
  156. polars/lazyframe/in_process.py +42 -0
  157. polars/lazyframe/opt_flags.py +333 -0
  158. polars/meta/__init__.py +14 -0
  159. polars/meta/build.py +33 -0
  160. polars/meta/index_type.py +27 -0
  161. polars/meta/thread_pool.py +50 -0
  162. polars/meta/versions.py +120 -0
  163. polars/ml/__init__.py +0 -0
  164. polars/ml/torch.py +213 -0
  165. polars/ml/utilities.py +30 -0
  166. polars/plugins.py +155 -0
  167. polars/py.typed +0 -0
  168. polars/pyproject.toml +96 -0
  169. polars/schema.py +265 -0
  170. polars/selectors.py +3117 -0
  171. polars/series/__init__.py +5 -0
  172. polars/series/array.py +776 -0
  173. polars/series/binary.py +254 -0
  174. polars/series/categorical.py +246 -0
  175. polars/series/datetime.py +2275 -0
  176. polars/series/list.py +1087 -0
  177. polars/series/plotting.py +191 -0
  178. polars/series/series.py +9197 -0
  179. polars/series/string.py +2367 -0
  180. polars/series/struct.py +154 -0
  181. polars/series/utils.py +191 -0
  182. polars/sql/__init__.py +7 -0
  183. polars/sql/context.py +677 -0
  184. polars/sql/functions.py +139 -0
  185. polars/string_cache.py +185 -0
  186. polars/testing/__init__.py +13 -0
  187. polars/testing/asserts/__init__.py +9 -0
  188. polars/testing/asserts/frame.py +231 -0
  189. polars/testing/asserts/series.py +219 -0
  190. polars/testing/asserts/utils.py +12 -0
  191. polars/testing/parametric/__init__.py +33 -0
  192. polars/testing/parametric/profiles.py +107 -0
  193. polars/testing/parametric/strategies/__init__.py +22 -0
  194. polars/testing/parametric/strategies/_utils.py +14 -0
  195. polars/testing/parametric/strategies/core.py +615 -0
  196. polars/testing/parametric/strategies/data.py +452 -0
  197. polars/testing/parametric/strategies/dtype.py +436 -0
  198. polars/testing/parametric/strategies/legacy.py +169 -0
  199. polars/type_aliases.py +24 -0
  200. polars_runtime_compat-1.34.0b2.dist-info/METADATA +190 -0
  201. polars_runtime_compat-1.34.0b2.dist-info/RECORD +203 -0
  202. polars_runtime_compat-1.34.0b2.dist-info/WHEEL +4 -0
  203. polars_runtime_compat-1.34.0b2.dist-info/licenses/LICENSE +20 -0
polars/_utils/wrap.py ADDED
@@ -0,0 +1,25 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING
4
+
5
+ import polars._reexport as pl
6
+
7
+ if TYPE_CHECKING:
8
+ from polars import DataFrame, Expr, LazyFrame, Series
9
+ from polars._plr import PyDataFrame, PyExpr, PyLazyFrame, PySeries
10
+
11
+
12
+ def wrap_df(df: PyDataFrame) -> DataFrame:
13
+ return pl.DataFrame._from_pydf(df)
14
+
15
+
16
+ def wrap_ldf(ldf: PyLazyFrame) -> LazyFrame:
17
+ return pl.LazyFrame._from_pyldf(ldf)
18
+
19
+
20
+ def wrap_s(s: PySeries) -> Series:
21
+ return pl.Series._from_pyseries(s)
22
+
23
+
24
+ def wrap_expr(pyexpr: PyExpr) -> Expr:
25
+ return pl.Expr._from_pyexpr(pyexpr)
polars/api.py ADDED
@@ -0,0 +1,370 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING, Callable, Generic, TypeVar
4
+ from warnings import warn
5
+
6
+ import polars._reexport as pl
7
+ from polars._utils.various import find_stacklevel
8
+
9
+ if TYPE_CHECKING:
10
+ from polars import DataFrame, Expr, LazyFrame, Series
11
+
12
+
13
+ __all__ = [
14
+ "register_dataframe_namespace",
15
+ "register_expr_namespace",
16
+ "register_lazyframe_namespace",
17
+ "register_series_namespace",
18
+ ]
19
+
20
+ # do not allow override of polars' own namespaces (as registered by '_accessors')
21
+ _reserved_namespaces: set[str] = set.union(
22
+ *(cls._accessors for cls in (pl.DataFrame, pl.Expr, pl.LazyFrame, pl.Series))
23
+ )
24
+
25
+
26
+ NS = TypeVar("NS")
27
+
28
+
29
+ class NameSpace(Generic[NS]):
30
+ """Establish property-like namespace object for user-defined functionality."""
31
+
32
+ def __init__(self, name: str, namespace: type[NS]) -> None:
33
+ self._accessor = name
34
+ self._ns = namespace
35
+
36
+ def __get__(self, instance: NS | None, cls: type[NS]) -> NS | type[NS]:
37
+ if instance is None:
38
+ return self._ns
39
+
40
+ ns_instance = self._ns(instance) # type: ignore[call-arg]
41
+ setattr(instance, self._accessor, ns_instance)
42
+ return ns_instance
43
+
44
+
45
+ def _create_namespace(
46
+ name: str, cls: type[Expr | DataFrame | LazyFrame | Series]
47
+ ) -> Callable[[type[NS]], type[NS]]:
48
+ """Register custom namespace against the underlying Polars class."""
49
+
50
+ def namespace(ns_class: type[NS]) -> type[NS]:
51
+ if name in _reserved_namespaces:
52
+ msg = f"cannot override reserved namespace {name!r}"
53
+ raise AttributeError(msg)
54
+ elif hasattr(cls, name):
55
+ warn(
56
+ f"Overriding existing custom namespace {name!r} (on {cls.__name__!r})",
57
+ UserWarning,
58
+ stacklevel=find_stacklevel(),
59
+ )
60
+
61
+ setattr(cls, name, NameSpace(name, ns_class))
62
+ cls._accessors.add(name)
63
+ return ns_class
64
+
65
+ return namespace
66
+
67
+
68
+ def register_expr_namespace(name: str) -> Callable[[type[NS]], type[NS]]:
69
+ """
70
+ Decorator for registering custom functionality with a Polars Expr.
71
+
72
+ Parameters
73
+ ----------
74
+ name
75
+ Name under which the functionality will be accessed.
76
+
77
+ See Also
78
+ --------
79
+ register_dataframe_namespace : Register functionality on a DataFrame.
80
+ register_lazyframe_namespace : Register functionality on a LazyFrame.
81
+ register_series_namespace : Register functionality on a Series.
82
+
83
+ Examples
84
+ --------
85
+ >>> @pl.api.register_expr_namespace("pow_n")
86
+ ... class PowersOfN:
87
+ ... def __init__(self, expr: pl.Expr) -> None:
88
+ ... self._expr = expr
89
+ ...
90
+ ... def next(self, p: int) -> pl.Expr:
91
+ ... return (p ** (self._expr.log(p).ceil()).cast(pl.Int64)).cast(pl.Int64)
92
+ ...
93
+ ... def previous(self, p: int) -> pl.Expr:
94
+ ... return (p ** (self._expr.log(p).floor()).cast(pl.Int64)).cast(pl.Int64)
95
+ ...
96
+ ... def nearest(self, p: int) -> pl.Expr:
97
+ ... return (p ** (self._expr.log(p)).round(0).cast(pl.Int64)).cast(pl.Int64)
98
+ >>>
99
+ >>> df = pl.DataFrame([1.4, 24.3, 55.0, 64.001], schema=["n"])
100
+ >>> df.select(
101
+ ... pl.col("n"),
102
+ ... pl.col("n").pow_n.next(p=2).alias("next_pow2"),
103
+ ... pl.col("n").pow_n.previous(p=2).alias("prev_pow2"),
104
+ ... pl.col("n").pow_n.nearest(p=2).alias("nearest_pow2"),
105
+ ... )
106
+ shape: (4, 4)
107
+ ┌────────┬───────────┬───────────┬──────────────┐
108
+ │ n ┆ next_pow2 ┆ prev_pow2 ┆ nearest_pow2 │
109
+ │ --- ┆ --- ┆ --- ┆ --- │
110
+ │ f64 ┆ i64 ┆ i64 ┆ i64 │
111
+ ╞════════╪═══════════╪═══════════╪══════════════╡
112
+ │ 1.4 ┆ 2 ┆ 1 ┆ 1 │
113
+ │ 24.3 ┆ 32 ┆ 16 ┆ 32 │
114
+ │ 55.0 ┆ 64 ┆ 32 ┆ 64 │
115
+ │ 64.001 ┆ 128 ┆ 64 ┆ 64 │
116
+ └────────┴───────────┴───────────┴──────────────┘
117
+ """
118
+ return _create_namespace(name, pl.Expr)
119
+
120
+
121
+ def register_dataframe_namespace(name: str) -> Callable[[type[NS]], type[NS]]:
122
+ """
123
+ Decorator for registering custom functionality with a Polars DataFrame.
124
+
125
+ Parameters
126
+ ----------
127
+ name
128
+ Name under which the functionality will be accessed.
129
+
130
+ See Also
131
+ --------
132
+ register_expr_namespace : Register functionality on an Expr.
133
+ register_lazyframe_namespace : Register functionality on a LazyFrame.
134
+ register_series_namespace : Register functionality on a Series.
135
+
136
+ Examples
137
+ --------
138
+ >>> @pl.api.register_dataframe_namespace("split")
139
+ ... class SplitFrame:
140
+ ... def __init__(self, df: pl.DataFrame) -> None:
141
+ ... self._df = df
142
+ ...
143
+ ... def by_first_letter_of_column_names(self) -> list[pl.DataFrame]:
144
+ ... return [
145
+ ... self._df.select([col for col in self._df.columns if col[0] == f])
146
+ ... for f in dict.fromkeys(col[0] for col in self._df.columns)
147
+ ... ]
148
+ ...
149
+ ... def by_first_letter_of_column_values(self, col: str) -> list[pl.DataFrame]:
150
+ ... return [
151
+ ... self._df.filter(pl.col(col).str.starts_with(c))
152
+ ... for c in sorted(
153
+ ... set(df.select(pl.col(col).str.slice(0, 1)).to_series())
154
+ ... )
155
+ ... ]
156
+ >>>
157
+ >>> df = pl.DataFrame(
158
+ ... data=[["xx", 2, 3, 4], ["xy", 4, 5, 6], ["yy", 5, 6, 7], ["yz", 6, 7, 8]],
159
+ ... schema=["a1", "a2", "b1", "b2"],
160
+ ... orient="row",
161
+ ... )
162
+ >>> df
163
+ shape: (4, 4)
164
+ ┌─────┬─────┬─────┬─────┐
165
+ │ a1 ┆ a2 ┆ b1 ┆ b2 │
166
+ │ --- ┆ --- ┆ --- ┆ --- │
167
+ │ str ┆ i64 ┆ i64 ┆ i64 │
168
+ ╞═════╪═════╪═════╪═════╡
169
+ │ xx ┆ 2 ┆ 3 ┆ 4 │
170
+ │ xy ┆ 4 ┆ 5 ┆ 6 │
171
+ │ yy ┆ 5 ┆ 6 ┆ 7 │
172
+ │ yz ┆ 6 ┆ 7 ┆ 8 │
173
+ └─────┴─────┴─────┴─────┘
174
+ >>> df.split.by_first_letter_of_column_names()
175
+ [shape: (4, 2)
176
+ ┌─────┬─────┐
177
+ │ a1 ┆ a2 │
178
+ │ --- ┆ --- │
179
+ │ str ┆ i64 │
180
+ ╞═════╪═════╡
181
+ │ xx ┆ 2 │
182
+ │ xy ┆ 4 │
183
+ │ yy ┆ 5 │
184
+ │ yz ┆ 6 │
185
+ └─────┴─────┘,
186
+ shape: (4, 2)
187
+ ┌─────┬─────┐
188
+ │ b1 ┆ b2 │
189
+ │ --- ┆ --- │
190
+ │ i64 ┆ i64 │
191
+ ╞═════╪═════╡
192
+ │ 3 ┆ 4 │
193
+ │ 5 ┆ 6 │
194
+ │ 6 ┆ 7 │
195
+ │ 7 ┆ 8 │
196
+ └─────┴─────┘]
197
+ >>> df.split.by_first_letter_of_column_values("a1")
198
+ [shape: (2, 4)
199
+ ┌─────┬─────┬─────┬─────┐
200
+ │ a1 ┆ a2 ┆ b1 ┆ b2 │
201
+ │ --- ┆ --- ┆ --- ┆ --- │
202
+ │ str ┆ i64 ┆ i64 ┆ i64 │
203
+ ╞═════╪═════╪═════╪═════╡
204
+ │ xx ┆ 2 ┆ 3 ┆ 4 │
205
+ │ xy ┆ 4 ┆ 5 ┆ 6 │
206
+ └─────┴─────┴─────┴─────┘, shape: (2, 4)
207
+ ┌─────┬─────┬─────┬─────┐
208
+ │ a1 ┆ a2 ┆ b1 ┆ b2 │
209
+ │ --- ┆ --- ┆ --- ┆ --- │
210
+ │ str ┆ i64 ┆ i64 ┆ i64 │
211
+ ╞═════╪═════╪═════╪═════╡
212
+ │ yy ┆ 5 ┆ 6 ┆ 7 │
213
+ │ yz ┆ 6 ┆ 7 ┆ 8 │
214
+ └─────┴─────┴─────┴─────┘]
215
+ """
216
+ return _create_namespace(name, pl.DataFrame)
217
+
218
+
219
+ def register_lazyframe_namespace(name: str) -> Callable[[type[NS]], type[NS]]:
220
+ """
221
+ Decorator for registering custom functionality with a Polars LazyFrame.
222
+
223
+ Parameters
224
+ ----------
225
+ name
226
+ Name under which the functionality will be accessed.
227
+
228
+ See Also
229
+ --------
230
+ register_expr_namespace : Register functionality on an Expr.
231
+ register_dataframe_namespace : Register functionality on a DataFrame.
232
+ register_series_namespace : Register functionality on a Series.
233
+
234
+ Examples
235
+ --------
236
+ >>> @pl.api.register_lazyframe_namespace("types")
237
+ ... class DTypeOperations:
238
+ ... def __init__(self, lf: pl.LazyFrame) -> None:
239
+ ... self._lf = lf
240
+ ...
241
+ ... def split_by_column_dtypes(self) -> list[pl.LazyFrame]:
242
+ ... return [
243
+ ... self._lf.select(pl.col(tp))
244
+ ... for tp in dict.fromkeys(self._lf.collect_schema().dtypes())
245
+ ... ]
246
+ ...
247
+ ... def upcast_integer_types(self) -> pl.LazyFrame:
248
+ ... return self._lf.with_columns(
249
+ ... pl.col(tp).cast(pl.Int64) for tp in (pl.Int8, pl.Int16, pl.Int32)
250
+ ... )
251
+ >>>
252
+ >>> lf = pl.LazyFrame(
253
+ ... data={"a": [1, 2], "b": [3, 4], "c": [5.6, 6.7]},
254
+ ... schema=[("a", pl.Int16), ("b", pl.Int32), ("c", pl.Float32)],
255
+ ... )
256
+ >>> lf.collect()
257
+ shape: (2, 3)
258
+ ┌─────┬─────┬─────┐
259
+ │ a ┆ b ┆ c │
260
+ │ --- ┆ --- ┆ --- │
261
+ │ i16 ┆ i32 ┆ f32 │
262
+ ╞═════╪═════╪═════╡
263
+ │ 1 ┆ 3 ┆ 5.6 │
264
+ │ 2 ┆ 4 ┆ 6.7 │
265
+ └─────┴─────┴─────┘
266
+ >>> lf.types.upcast_integer_types().collect()
267
+ shape: (2, 3)
268
+ ┌─────┬─────┬─────┐
269
+ │ a ┆ b ┆ c │
270
+ │ --- ┆ --- ┆ --- │
271
+ │ i64 ┆ i64 ┆ f32 │
272
+ ╞═════╪═════╪═════╡
273
+ │ 1 ┆ 3 ┆ 5.6 │
274
+ │ 2 ┆ 4 ┆ 6.7 │
275
+ └─────┴─────┴─────┘
276
+
277
+ >>> lf = pl.LazyFrame(
278
+ ... data=[["xx", 2, 3, 4], ["xy", 4, 5, 6], ["yy", 5, 6, 7], ["yz", 6, 7, 8]],
279
+ ... schema=["a1", "a2", "b1", "b2"],
280
+ ... orient="row",
281
+ ... )
282
+ >>> lf.collect()
283
+ shape: (4, 4)
284
+ ┌─────┬─────┬─────┬─────┐
285
+ │ a1 ┆ a2 ┆ b1 ┆ b2 │
286
+ │ --- ┆ --- ┆ --- ┆ --- │
287
+ │ str ┆ i64 ┆ i64 ┆ i64 │
288
+ ╞═════╪═════╪═════╪═════╡
289
+ │ xx ┆ 2 ┆ 3 ┆ 4 │
290
+ │ xy ┆ 4 ┆ 5 ┆ 6 │
291
+ │ yy ┆ 5 ┆ 6 ┆ 7 │
292
+ │ yz ┆ 6 ┆ 7 ┆ 8 │
293
+ └─────┴─────┴─────┴─────┘
294
+ >>> pl.collect_all(lf.types.split_by_column_dtypes())
295
+ [shape: (4, 1)
296
+ ┌─────┐
297
+ │ a1 │
298
+ │ --- │
299
+ │ str │
300
+ ╞═════╡
301
+ │ xx │
302
+ │ xy │
303
+ │ yy │
304
+ │ yz │
305
+ └─────┘, shape: (4, 3)
306
+ ┌─────┬─────┬─────┐
307
+ │ a2 ┆ b1 ┆ b2 │
308
+ │ --- ┆ --- ┆ --- │
309
+ │ i64 ┆ i64 ┆ i64 │
310
+ ╞═════╪═════╪═════╡
311
+ │ 2 ┆ 3 ┆ 4 │
312
+ │ 4 ┆ 5 ┆ 6 │
313
+ │ 5 ┆ 6 ┆ 7 │
314
+ │ 6 ┆ 7 ┆ 8 │
315
+ └─────┴─────┴─────┘]
316
+ """
317
+ return _create_namespace(name, pl.LazyFrame)
318
+
319
+
320
+ def register_series_namespace(name: str) -> Callable[[type[NS]], type[NS]]:
321
+ """
322
+ Decorator for registering custom functionality with a polars Series.
323
+
324
+ Parameters
325
+ ----------
326
+ name
327
+ Name under which the functionality will be accessed.
328
+
329
+ See Also
330
+ --------
331
+ register_expr_namespace : Register functionality on an Expr.
332
+ register_dataframe_namespace : Register functionality on a DataFrame.
333
+ register_lazyframe_namespace : Register functionality on a LazyFrame.
334
+
335
+ Examples
336
+ --------
337
+ >>> @pl.api.register_series_namespace("math")
338
+ ... class MathShortcuts:
339
+ ... def __init__(self, s: pl.Series) -> None:
340
+ ... self._s = s
341
+ ...
342
+ ... def square(self) -> pl.Series:
343
+ ... return self._s * self._s
344
+ ...
345
+ ... def cube(self) -> pl.Series:
346
+ ... return self._s * self._s * self._s
347
+ >>>
348
+ >>> s = pl.Series("n", [1.5, 31.0, 42.0, 64.5])
349
+ >>> s.math.square().alias("s^2")
350
+ shape: (4,)
351
+ Series: 's^2' [f64]
352
+ [
353
+ 2.25
354
+ 961.0
355
+ 1764.0
356
+ 4160.25
357
+ ]
358
+ >>> s = pl.Series("n", [1, 2, 3, 4, 5])
359
+ >>> s.math.cube().alias("s^3")
360
+ shape: (5,)
361
+ Series: 's^3' [i64]
362
+ [
363
+ 1
364
+ 8
365
+ 27
366
+ 64
367
+ 125
368
+ ]
369
+ """
370
+ return _create_namespace(name, pl.Series)
File without changes
@@ -0,0 +1,19 @@
1
+ from polars.catalog.unity.client import Catalog
2
+ from polars.catalog.unity.models import (
3
+ CatalogInfo,
4
+ ColumnInfo,
5
+ DataSourceFormat,
6
+ NamespaceInfo,
7
+ TableInfo,
8
+ TableType,
9
+ )
10
+
11
+ __all__ = [
12
+ "Catalog",
13
+ "CatalogInfo",
14
+ "ColumnInfo",
15
+ "DataSourceFormat",
16
+ "NamespaceInfo",
17
+ "TableInfo",
18
+ "TableType",
19
+ ]