polars-runtime-compat 1.34.0b3__cp39-abi3-win_amd64.whl → 1.34.0b4__cp39-abi3-win_amd64.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.
- _polars_runtime_compat/_polars_runtime_compat.pyd +0 -0
- {polars_runtime_compat-1.34.0b3.dist-info → polars_runtime_compat-1.34.0b4.dist-info}/METADATA +1 -1
- polars_runtime_compat-1.34.0b4.dist-info/RECORD +6 -0
- polars/__init__.py +0 -528
- polars/_cpu_check.py +0 -265
- polars/_dependencies.py +0 -355
- polars/_plr.py +0 -99
- polars/_plr.pyi +0 -2496
- polars/_reexport.py +0 -23
- polars/_typing.py +0 -478
- polars/_utils/__init__.py +0 -37
- polars/_utils/async_.py +0 -102
- polars/_utils/cache.py +0 -176
- polars/_utils/cloud.py +0 -40
- polars/_utils/constants.py +0 -29
- polars/_utils/construction/__init__.py +0 -46
- polars/_utils/construction/dataframe.py +0 -1397
- polars/_utils/construction/other.py +0 -72
- polars/_utils/construction/series.py +0 -560
- polars/_utils/construction/utils.py +0 -118
- polars/_utils/convert.py +0 -224
- polars/_utils/deprecation.py +0 -406
- polars/_utils/getitem.py +0 -457
- polars/_utils/logging.py +0 -11
- polars/_utils/nest_asyncio.py +0 -264
- polars/_utils/parquet.py +0 -15
- polars/_utils/parse/__init__.py +0 -12
- polars/_utils/parse/expr.py +0 -242
- polars/_utils/polars_version.py +0 -19
- polars/_utils/pycapsule.py +0 -53
- polars/_utils/scan.py +0 -27
- polars/_utils/serde.py +0 -63
- polars/_utils/slice.py +0 -215
- polars/_utils/udfs.py +0 -1251
- polars/_utils/unstable.py +0 -63
- polars/_utils/various.py +0 -782
- polars/_utils/wrap.py +0 -25
- polars/api.py +0 -370
- polars/catalog/__init__.py +0 -0
- polars/catalog/unity/__init__.py +0 -19
- polars/catalog/unity/client.py +0 -733
- polars/catalog/unity/models.py +0 -152
- polars/config.py +0 -1571
- polars/convert/__init__.py +0 -25
- polars/convert/general.py +0 -1046
- polars/convert/normalize.py +0 -261
- polars/dataframe/__init__.py +0 -5
- polars/dataframe/_html.py +0 -186
- polars/dataframe/frame.py +0 -12582
- polars/dataframe/group_by.py +0 -1067
- polars/dataframe/plotting.py +0 -257
- polars/datatype_expr/__init__.py +0 -5
- polars/datatype_expr/array.py +0 -56
- polars/datatype_expr/datatype_expr.py +0 -304
- polars/datatype_expr/list.py +0 -18
- polars/datatype_expr/struct.py +0 -69
- polars/datatypes/__init__.py +0 -122
- polars/datatypes/_parse.py +0 -195
- polars/datatypes/_utils.py +0 -48
- polars/datatypes/classes.py +0 -1213
- polars/datatypes/constants.py +0 -11
- polars/datatypes/constructor.py +0 -172
- polars/datatypes/convert.py +0 -366
- polars/datatypes/group.py +0 -130
- polars/exceptions.py +0 -230
- polars/expr/__init__.py +0 -7
- polars/expr/array.py +0 -964
- polars/expr/binary.py +0 -346
- polars/expr/categorical.py +0 -306
- polars/expr/datetime.py +0 -2620
- polars/expr/expr.py +0 -11272
- polars/expr/list.py +0 -1408
- polars/expr/meta.py +0 -444
- polars/expr/name.py +0 -321
- polars/expr/string.py +0 -3045
- polars/expr/struct.py +0 -357
- polars/expr/whenthen.py +0 -185
- polars/functions/__init__.py +0 -193
- polars/functions/aggregation/__init__.py +0 -33
- polars/functions/aggregation/horizontal.py +0 -298
- polars/functions/aggregation/vertical.py +0 -341
- polars/functions/as_datatype.py +0 -848
- polars/functions/business.py +0 -138
- polars/functions/col.py +0 -384
- polars/functions/datatype.py +0 -121
- polars/functions/eager.py +0 -524
- polars/functions/escape_regex.py +0 -29
- polars/functions/lazy.py +0 -2751
- polars/functions/len.py +0 -68
- polars/functions/lit.py +0 -210
- polars/functions/random.py +0 -22
- polars/functions/range/__init__.py +0 -19
- polars/functions/range/_utils.py +0 -15
- polars/functions/range/date_range.py +0 -303
- polars/functions/range/datetime_range.py +0 -370
- polars/functions/range/int_range.py +0 -348
- polars/functions/range/linear_space.py +0 -311
- polars/functions/range/time_range.py +0 -287
- polars/functions/repeat.py +0 -301
- polars/functions/whenthen.py +0 -353
- polars/interchange/__init__.py +0 -10
- polars/interchange/buffer.py +0 -77
- polars/interchange/column.py +0 -190
- polars/interchange/dataframe.py +0 -230
- polars/interchange/from_dataframe.py +0 -328
- polars/interchange/protocol.py +0 -303
- polars/interchange/utils.py +0 -170
- polars/io/__init__.py +0 -64
- polars/io/_utils.py +0 -317
- polars/io/avro.py +0 -49
- polars/io/clipboard.py +0 -36
- polars/io/cloud/__init__.py +0 -17
- polars/io/cloud/_utils.py +0 -80
- polars/io/cloud/credential_provider/__init__.py +0 -17
- polars/io/cloud/credential_provider/_builder.py +0 -520
- polars/io/cloud/credential_provider/_providers.py +0 -618
- polars/io/csv/__init__.py +0 -9
- polars/io/csv/_utils.py +0 -38
- polars/io/csv/batched_reader.py +0 -142
- polars/io/csv/functions.py +0 -1495
- polars/io/database/__init__.py +0 -6
- polars/io/database/_arrow_registry.py +0 -70
- polars/io/database/_cursor_proxies.py +0 -147
- polars/io/database/_executor.py +0 -578
- polars/io/database/_inference.py +0 -314
- polars/io/database/_utils.py +0 -144
- polars/io/database/functions.py +0 -516
- polars/io/delta.py +0 -499
- polars/io/iceberg/__init__.py +0 -3
- polars/io/iceberg/_utils.py +0 -697
- polars/io/iceberg/dataset.py +0 -556
- polars/io/iceberg/functions.py +0 -151
- polars/io/ipc/__init__.py +0 -8
- polars/io/ipc/functions.py +0 -514
- polars/io/json/__init__.py +0 -3
- polars/io/json/read.py +0 -101
- polars/io/ndjson.py +0 -332
- polars/io/parquet/__init__.py +0 -17
- polars/io/parquet/field_overwrites.py +0 -140
- polars/io/parquet/functions.py +0 -722
- polars/io/partition.py +0 -491
- polars/io/plugins.py +0 -187
- polars/io/pyarrow_dataset/__init__.py +0 -5
- polars/io/pyarrow_dataset/anonymous_scan.py +0 -109
- polars/io/pyarrow_dataset/functions.py +0 -79
- polars/io/scan_options/__init__.py +0 -5
- polars/io/scan_options/_options.py +0 -59
- polars/io/scan_options/cast_options.py +0 -126
- polars/io/spreadsheet/__init__.py +0 -6
- polars/io/spreadsheet/_utils.py +0 -52
- polars/io/spreadsheet/_write_utils.py +0 -647
- polars/io/spreadsheet/functions.py +0 -1323
- polars/lazyframe/__init__.py +0 -9
- polars/lazyframe/engine_config.py +0 -61
- polars/lazyframe/frame.py +0 -8564
- polars/lazyframe/group_by.py +0 -669
- polars/lazyframe/in_process.py +0 -42
- polars/lazyframe/opt_flags.py +0 -333
- polars/meta/__init__.py +0 -14
- polars/meta/build.py +0 -33
- polars/meta/index_type.py +0 -27
- polars/meta/thread_pool.py +0 -50
- polars/meta/versions.py +0 -120
- polars/ml/__init__.py +0 -0
- polars/ml/torch.py +0 -213
- polars/ml/utilities.py +0 -30
- polars/plugins.py +0 -155
- polars/py.typed +0 -0
- polars/pyproject.toml +0 -103
- polars/schema.py +0 -265
- polars/selectors.py +0 -3117
- polars/series/__init__.py +0 -5
- polars/series/array.py +0 -776
- polars/series/binary.py +0 -254
- polars/series/categorical.py +0 -246
- polars/series/datetime.py +0 -2275
- polars/series/list.py +0 -1087
- polars/series/plotting.py +0 -191
- polars/series/series.py +0 -9197
- polars/series/string.py +0 -2367
- polars/series/struct.py +0 -154
- polars/series/utils.py +0 -191
- polars/sql/__init__.py +0 -7
- polars/sql/context.py +0 -677
- polars/sql/functions.py +0 -139
- polars/string_cache.py +0 -185
- polars/testing/__init__.py +0 -13
- polars/testing/asserts/__init__.py +0 -9
- polars/testing/asserts/frame.py +0 -231
- polars/testing/asserts/series.py +0 -219
- polars/testing/asserts/utils.py +0 -12
- polars/testing/parametric/__init__.py +0 -33
- polars/testing/parametric/profiles.py +0 -107
- polars/testing/parametric/strategies/__init__.py +0 -22
- polars/testing/parametric/strategies/_utils.py +0 -14
- polars/testing/parametric/strategies/core.py +0 -615
- polars/testing/parametric/strategies/data.py +0 -452
- polars/testing/parametric/strategies/dtype.py +0 -436
- polars/testing/parametric/strategies/legacy.py +0 -169
- polars/type_aliases.py +0 -24
- polars_runtime_compat-1.34.0b3.dist-info/RECORD +0 -203
- {polars_runtime_compat-1.34.0b3.dist-info → polars_runtime_compat-1.34.0b4.dist-info}/WHEEL +0 -0
- {polars_runtime_compat-1.34.0b3.dist-info → polars_runtime_compat-1.34.0b4.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,311 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
import contextlib
|
|
4
|
-
from typing import TYPE_CHECKING, overload
|
|
5
|
-
|
|
6
|
-
from polars import functions as F
|
|
7
|
-
from polars._utils.parse import parse_into_expression
|
|
8
|
-
from polars._utils.unstable import unstable
|
|
9
|
-
from polars._utils.wrap import wrap_expr
|
|
10
|
-
|
|
11
|
-
with contextlib.suppress(ImportError): # Module not available when building docs
|
|
12
|
-
import polars._plr as plr
|
|
13
|
-
|
|
14
|
-
from typing import Literal
|
|
15
|
-
|
|
16
|
-
if TYPE_CHECKING:
|
|
17
|
-
from polars import Expr, Series
|
|
18
|
-
from polars._typing import (
|
|
19
|
-
ClosedInterval,
|
|
20
|
-
IntoExpr,
|
|
21
|
-
IntoExprColumn,
|
|
22
|
-
NumericLiteral,
|
|
23
|
-
TemporalLiteral,
|
|
24
|
-
)
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
@overload
|
|
28
|
-
def linear_space(
|
|
29
|
-
start: NumericLiteral | TemporalLiteral | IntoExpr,
|
|
30
|
-
end: NumericLiteral | TemporalLiteral | IntoExpr,
|
|
31
|
-
num_samples: int | IntoExpr,
|
|
32
|
-
*,
|
|
33
|
-
closed: ClosedInterval = ...,
|
|
34
|
-
eager: Literal[False] = ...,
|
|
35
|
-
) -> Expr: ...
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
@overload
|
|
39
|
-
def linear_space(
|
|
40
|
-
start: NumericLiteral | TemporalLiteral | IntoExpr,
|
|
41
|
-
end: NumericLiteral | TemporalLiteral | IntoExpr,
|
|
42
|
-
num_samples: int | IntoExpr,
|
|
43
|
-
*,
|
|
44
|
-
closed: ClosedInterval = ...,
|
|
45
|
-
eager: Literal[True],
|
|
46
|
-
) -> Series: ...
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
@overload
|
|
50
|
-
def linear_space(
|
|
51
|
-
start: NumericLiteral | TemporalLiteral | IntoExpr,
|
|
52
|
-
end: NumericLiteral | TemporalLiteral | IntoExpr,
|
|
53
|
-
num_samples: int | IntoExpr,
|
|
54
|
-
*,
|
|
55
|
-
closed: ClosedInterval = ...,
|
|
56
|
-
eager: bool,
|
|
57
|
-
) -> Expr | Series: ...
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
@unstable()
|
|
61
|
-
def linear_space(
|
|
62
|
-
start: NumericLiteral | TemporalLiteral | IntoExpr,
|
|
63
|
-
end: NumericLiteral | TemporalLiteral | IntoExpr,
|
|
64
|
-
num_samples: int | IntoExpr,
|
|
65
|
-
*,
|
|
66
|
-
closed: ClosedInterval = "both",
|
|
67
|
-
eager: bool = False,
|
|
68
|
-
) -> Expr | Series:
|
|
69
|
-
"""
|
|
70
|
-
Create sequence of evenly-spaced points.
|
|
71
|
-
|
|
72
|
-
Parameters
|
|
73
|
-
----------
|
|
74
|
-
start
|
|
75
|
-
Lower bound of the range.
|
|
76
|
-
end
|
|
77
|
-
Upper bound of the range.
|
|
78
|
-
num_samples
|
|
79
|
-
Number of samples in the output sequence.
|
|
80
|
-
closed : {'both', 'left', 'right', 'none'}
|
|
81
|
-
Define which sides of the interval are closed (inclusive).
|
|
82
|
-
eager
|
|
83
|
-
Evaluate immediately and return a `Series`.
|
|
84
|
-
If set to `False` (default), return an expression instead.
|
|
85
|
-
|
|
86
|
-
.. warning::
|
|
87
|
-
This functionality is experimental. It may be changed at any point without it
|
|
88
|
-
being considered a breaking change.
|
|
89
|
-
|
|
90
|
-
Notes
|
|
91
|
-
-----
|
|
92
|
-
`linear_space` works with numeric and temporal dtypes. When the `start` and `end`
|
|
93
|
-
parameters are `Date` dtypes, the output sequence consists of equally-spaced
|
|
94
|
-
`Datetime` elements with millisecond precision.
|
|
95
|
-
|
|
96
|
-
Returns
|
|
97
|
-
-------
|
|
98
|
-
Expr or Series
|
|
99
|
-
Column of data type `:class:Time`.
|
|
100
|
-
|
|
101
|
-
Examples
|
|
102
|
-
--------
|
|
103
|
-
>>> pl.linear_space(start=0, end=1, num_samples=3, eager=True)
|
|
104
|
-
shape: (3,)
|
|
105
|
-
Series: 'literal' [f64]
|
|
106
|
-
[
|
|
107
|
-
0.0
|
|
108
|
-
0.5
|
|
109
|
-
1.0
|
|
110
|
-
]
|
|
111
|
-
>>> pl.linear_space(start=0, end=1, num_samples=3, closed="left", eager=True)
|
|
112
|
-
shape: (3,)
|
|
113
|
-
Series: 'literal' [f64]
|
|
114
|
-
[
|
|
115
|
-
0.0
|
|
116
|
-
0.333333
|
|
117
|
-
0.666667
|
|
118
|
-
]
|
|
119
|
-
>>> pl.linear_space(start=0, end=1, num_samples=3, closed="right", eager=True)
|
|
120
|
-
shape: (3,)
|
|
121
|
-
Series: 'literal' [f64]
|
|
122
|
-
[
|
|
123
|
-
0.333333
|
|
124
|
-
0.666667
|
|
125
|
-
1.0
|
|
126
|
-
]
|
|
127
|
-
>>> pl.linear_space(start=0, end=1, num_samples=3, closed="none", eager=True)
|
|
128
|
-
shape: (3,)
|
|
129
|
-
Series: 'literal' [f64]
|
|
130
|
-
[
|
|
131
|
-
0.25
|
|
132
|
-
0.5
|
|
133
|
-
0.75
|
|
134
|
-
]
|
|
135
|
-
>>> from datetime import time
|
|
136
|
-
>>> pl.linear_space(
|
|
137
|
-
... start=time(hour=1), end=time(hour=12), num_samples=3, eager=True
|
|
138
|
-
... )
|
|
139
|
-
shape: (3,)
|
|
140
|
-
Series: 'literal' [time]
|
|
141
|
-
[
|
|
142
|
-
01:00:00
|
|
143
|
-
06:30:00
|
|
144
|
-
12:00:00
|
|
145
|
-
]
|
|
146
|
-
|
|
147
|
-
`Date` endpoints generate a sequence of `Datetime` values:
|
|
148
|
-
|
|
149
|
-
>>> from datetime import date
|
|
150
|
-
>>> pl.linear_space(
|
|
151
|
-
... start=date(2025, 1, 1),
|
|
152
|
-
... end=date(2025, 2, 1),
|
|
153
|
-
... num_samples=3,
|
|
154
|
-
... closed="right",
|
|
155
|
-
... eager=True,
|
|
156
|
-
... )
|
|
157
|
-
shape: (3,)
|
|
158
|
-
Series: 'literal' [datetime[μs]]
|
|
159
|
-
[
|
|
160
|
-
2025-01-11 08:00:00
|
|
161
|
-
2025-01-21 16:00:00
|
|
162
|
-
2025-02-01 00:00:00
|
|
163
|
-
]
|
|
164
|
-
|
|
165
|
-
When `eager=False` (default), an expression is produced. You can generate a sequence
|
|
166
|
-
using the length of the dataframe:
|
|
167
|
-
|
|
168
|
-
>>> df = pl.DataFrame({"a": [1, 2, 3, 4, 5]})
|
|
169
|
-
>>> df.with_columns(pl.linear_space(0, 1, pl.len()).alias("ls"))
|
|
170
|
-
shape: (5, 2)
|
|
171
|
-
┌─────┬──────┐
|
|
172
|
-
│ a ┆ ls │
|
|
173
|
-
│ --- ┆ --- │
|
|
174
|
-
│ i64 ┆ f64 │
|
|
175
|
-
╞═════╪══════╡
|
|
176
|
-
│ 1 ┆ 0.0 │
|
|
177
|
-
│ 2 ┆ 0.25 │
|
|
178
|
-
│ 3 ┆ 0.5 │
|
|
179
|
-
│ 4 ┆ 0.75 │
|
|
180
|
-
│ 5 ┆ 1.0 │
|
|
181
|
-
└─────┴──────┘
|
|
182
|
-
"""
|
|
183
|
-
start_pyexpr = parse_into_expression(start)
|
|
184
|
-
end_pyexpr = parse_into_expression(end)
|
|
185
|
-
num_samples_pyexpr = parse_into_expression(num_samples)
|
|
186
|
-
result = wrap_expr(
|
|
187
|
-
plr.linear_space(start_pyexpr, end_pyexpr, num_samples_pyexpr, closed)
|
|
188
|
-
)
|
|
189
|
-
|
|
190
|
-
if eager:
|
|
191
|
-
return F.select(result).to_series()
|
|
192
|
-
|
|
193
|
-
return result
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
@overload
|
|
197
|
-
def linear_spaces(
|
|
198
|
-
start: NumericLiteral | TemporalLiteral | IntoExprColumn,
|
|
199
|
-
end: NumericLiteral | TemporalLiteral | IntoExprColumn,
|
|
200
|
-
num_samples: int | IntoExprColumn,
|
|
201
|
-
*,
|
|
202
|
-
closed: ClosedInterval = ...,
|
|
203
|
-
as_array: bool = ...,
|
|
204
|
-
eager: Literal[False] = ...,
|
|
205
|
-
) -> Expr: ...
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
@overload
|
|
209
|
-
def linear_spaces(
|
|
210
|
-
start: NumericLiteral | TemporalLiteral | IntoExprColumn,
|
|
211
|
-
end: NumericLiteral | TemporalLiteral | IntoExprColumn,
|
|
212
|
-
num_samples: int | IntoExprColumn,
|
|
213
|
-
*,
|
|
214
|
-
closed: ClosedInterval = ...,
|
|
215
|
-
as_array: bool = ...,
|
|
216
|
-
eager: Literal[True],
|
|
217
|
-
) -> Series: ...
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
@overload
|
|
221
|
-
def linear_spaces(
|
|
222
|
-
start: NumericLiteral | TemporalLiteral | IntoExprColumn,
|
|
223
|
-
end: NumericLiteral | TemporalLiteral | IntoExprColumn,
|
|
224
|
-
num_samples: int | IntoExprColumn,
|
|
225
|
-
*,
|
|
226
|
-
closed: ClosedInterval = ...,
|
|
227
|
-
as_array: bool = ...,
|
|
228
|
-
eager: bool,
|
|
229
|
-
) -> Expr | Series: ...
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
def linear_spaces(
|
|
233
|
-
start: NumericLiteral | TemporalLiteral | IntoExprColumn,
|
|
234
|
-
end: NumericLiteral | TemporalLiteral | IntoExprColumn,
|
|
235
|
-
num_samples: int | IntoExprColumn,
|
|
236
|
-
*,
|
|
237
|
-
closed: ClosedInterval = "both",
|
|
238
|
-
as_array: bool = False,
|
|
239
|
-
eager: bool = False,
|
|
240
|
-
) -> Expr | Series:
|
|
241
|
-
"""
|
|
242
|
-
Generate a sequence of evenly-spaced values for each row between `start` and `end`.
|
|
243
|
-
|
|
244
|
-
The number of values in each sequence is determined by `num_samples`.
|
|
245
|
-
|
|
246
|
-
Parameters
|
|
247
|
-
----------
|
|
248
|
-
start
|
|
249
|
-
Lower bound of the range.
|
|
250
|
-
end
|
|
251
|
-
Upper bound of the range.
|
|
252
|
-
num_samples
|
|
253
|
-
Number of samples in the output sequence.
|
|
254
|
-
closed : {'both', 'left', 'right', 'none'}
|
|
255
|
-
Define which sides of the interval are closed (inclusive).
|
|
256
|
-
as_array
|
|
257
|
-
Return result as a fixed-length `Array`. `num_samples` must be a constant.
|
|
258
|
-
eager
|
|
259
|
-
Evaluate immediately and return a `Series`.
|
|
260
|
-
If set to `False` (default), return an expression instead.
|
|
261
|
-
|
|
262
|
-
.. warning::
|
|
263
|
-
This functionality is experimental. It may be changed at any point without it
|
|
264
|
-
being considered a breaking change.
|
|
265
|
-
|
|
266
|
-
Returns
|
|
267
|
-
-------
|
|
268
|
-
Expr or Series
|
|
269
|
-
Column of data type `List(dtype)`.
|
|
270
|
-
|
|
271
|
-
See Also
|
|
272
|
-
--------
|
|
273
|
-
linear_space : Generate a single sequence of linearly-spaced values.
|
|
274
|
-
|
|
275
|
-
Examples
|
|
276
|
-
--------
|
|
277
|
-
>>> df = pl.DataFrame({"start": [1, -1], "end": [3, 2], "num_samples": [4, 5]})
|
|
278
|
-
>>> df.with_columns(ls=pl.linear_spaces("start", "end", "num_samples"))
|
|
279
|
-
shape: (2, 4)
|
|
280
|
-
┌───────┬─────┬─────────────┬────────────────────────┐
|
|
281
|
-
│ start ┆ end ┆ num_samples ┆ ls │
|
|
282
|
-
│ --- ┆ --- ┆ --- ┆ --- │
|
|
283
|
-
│ i64 ┆ i64 ┆ i64 ┆ list[f64] │
|
|
284
|
-
╞═══════╪═════╪═════════════╪════════════════════════╡
|
|
285
|
-
│ 1 ┆ 3 ┆ 4 ┆ [1.0, 1.666667, … 3.0] │
|
|
286
|
-
│ -1 ┆ 2 ┆ 5 ┆ [-1.0, -0.25, … 2.0] │
|
|
287
|
-
└───────┴─────┴─────────────┴────────────────────────┘
|
|
288
|
-
>>> df.with_columns(ls=pl.linear_spaces("start", "end", 3, as_array=True))
|
|
289
|
-
shape: (2, 4)
|
|
290
|
-
┌───────┬─────┬─────────────┬──────────────────┐
|
|
291
|
-
│ start ┆ end ┆ num_samples ┆ ls │
|
|
292
|
-
│ --- ┆ --- ┆ --- ┆ --- │
|
|
293
|
-
│ i64 ┆ i64 ┆ i64 ┆ array[f64, 3] │
|
|
294
|
-
╞═══════╪═════╪═════════════╪══════════════════╡
|
|
295
|
-
│ 1 ┆ 3 ┆ 4 ┆ [1.0, 2.0, 3.0] │
|
|
296
|
-
│ -1 ┆ 2 ┆ 5 ┆ [-1.0, 0.5, 2.0] │
|
|
297
|
-
└───────┴─────┴─────────────┴──────────────────┘
|
|
298
|
-
"""
|
|
299
|
-
start_pyexpr = parse_into_expression(start)
|
|
300
|
-
end_pyexpr = parse_into_expression(end)
|
|
301
|
-
num_samples_pyexpr = parse_into_expression(num_samples)
|
|
302
|
-
result = wrap_expr(
|
|
303
|
-
plr.linear_spaces(
|
|
304
|
-
start_pyexpr, end_pyexpr, num_samples_pyexpr, closed, as_array
|
|
305
|
-
)
|
|
306
|
-
)
|
|
307
|
-
|
|
308
|
-
if eager:
|
|
309
|
-
return F.select(result).to_series()
|
|
310
|
-
|
|
311
|
-
return result
|
|
@@ -1,287 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
import contextlib
|
|
4
|
-
from datetime import time
|
|
5
|
-
from typing import TYPE_CHECKING, overload
|
|
6
|
-
|
|
7
|
-
from polars import functions as F
|
|
8
|
-
from polars._utils.parse import parse_into_expression
|
|
9
|
-
from polars._utils.wrap import wrap_expr
|
|
10
|
-
from polars.functions.range._utils import parse_interval_argument
|
|
11
|
-
|
|
12
|
-
with contextlib.suppress(ImportError): # Module not available when building docs
|
|
13
|
-
import polars._plr as plr
|
|
14
|
-
|
|
15
|
-
if TYPE_CHECKING:
|
|
16
|
-
from datetime import timedelta
|
|
17
|
-
from typing import Literal
|
|
18
|
-
|
|
19
|
-
from polars import Expr, Series
|
|
20
|
-
from polars._typing import ClosedInterval, IntoExprColumn
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
@overload
|
|
24
|
-
def time_range(
|
|
25
|
-
start: time | IntoExprColumn | None = ...,
|
|
26
|
-
end: time | IntoExprColumn | None = ...,
|
|
27
|
-
interval: str | timedelta = ...,
|
|
28
|
-
*,
|
|
29
|
-
closed: ClosedInterval = ...,
|
|
30
|
-
eager: Literal[False] = ...,
|
|
31
|
-
) -> Expr: ...
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
@overload
|
|
35
|
-
def time_range(
|
|
36
|
-
start: time | IntoExprColumn | None = ...,
|
|
37
|
-
end: time | IntoExprColumn | None = ...,
|
|
38
|
-
interval: str | timedelta = ...,
|
|
39
|
-
*,
|
|
40
|
-
closed: ClosedInterval = ...,
|
|
41
|
-
eager: Literal[True],
|
|
42
|
-
) -> Series: ...
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
@overload
|
|
46
|
-
def time_range(
|
|
47
|
-
start: time | IntoExprColumn | None = ...,
|
|
48
|
-
end: time | IntoExprColumn | None = ...,
|
|
49
|
-
interval: str | timedelta = ...,
|
|
50
|
-
*,
|
|
51
|
-
closed: ClosedInterval = ...,
|
|
52
|
-
eager: bool,
|
|
53
|
-
) -> Series | Expr: ...
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
def time_range(
|
|
57
|
-
start: time | IntoExprColumn | None = None,
|
|
58
|
-
end: time | IntoExprColumn | None = None,
|
|
59
|
-
interval: str | timedelta = "1h",
|
|
60
|
-
*,
|
|
61
|
-
closed: ClosedInterval = "both",
|
|
62
|
-
eager: bool = False,
|
|
63
|
-
) -> Series | Expr:
|
|
64
|
-
"""
|
|
65
|
-
Generate a time range.
|
|
66
|
-
|
|
67
|
-
Parameters
|
|
68
|
-
----------
|
|
69
|
-
start
|
|
70
|
-
Lower bound of the time range.
|
|
71
|
-
If omitted, defaults to `time(0,0,0,0)`.
|
|
72
|
-
end
|
|
73
|
-
Upper bound of the time range.
|
|
74
|
-
If omitted, defaults to `time(23,59,59,999999)`.
|
|
75
|
-
interval
|
|
76
|
-
Interval of the range periods, specified as a Python `timedelta` object
|
|
77
|
-
or using the Polars duration string language (see "Notes" section below).
|
|
78
|
-
closed : {'both', 'left', 'right', 'none'}
|
|
79
|
-
Define which sides of the range are closed (inclusive).
|
|
80
|
-
eager
|
|
81
|
-
Evaluate immediately and return a `Series`.
|
|
82
|
-
If set to `False` (default), return an expression instead.
|
|
83
|
-
|
|
84
|
-
Returns
|
|
85
|
-
-------
|
|
86
|
-
Expr or Series
|
|
87
|
-
Column of data type `:class:Time`.
|
|
88
|
-
|
|
89
|
-
Notes
|
|
90
|
-
-----
|
|
91
|
-
`interval` is created according to the following string language:
|
|
92
|
-
|
|
93
|
-
- 1ns (1 nanosecond)
|
|
94
|
-
- 1us (1 microsecond)
|
|
95
|
-
- 1ms (1 millisecond)
|
|
96
|
-
- 1s (1 second)
|
|
97
|
-
- 1m (1 minute)
|
|
98
|
-
- 1h (1 hour)
|
|
99
|
-
- 1d (1 calendar day)
|
|
100
|
-
- 1w (1 calendar week)
|
|
101
|
-
- 1mo (1 calendar month)
|
|
102
|
-
- 1q (1 calendar quarter)
|
|
103
|
-
- 1y (1 calendar year)
|
|
104
|
-
|
|
105
|
-
Or combine them:
|
|
106
|
-
"3d12h4m25s" # 3 days, 12 hours, 4 minutes, and 25 seconds
|
|
107
|
-
|
|
108
|
-
By "calendar day", we mean the corresponding time on the next day (which may
|
|
109
|
-
not be 24 hours, due to daylight savings). Similarly for "calendar week",
|
|
110
|
-
"calendar month", "calendar quarter", and "calendar year".
|
|
111
|
-
|
|
112
|
-
See Also
|
|
113
|
-
--------
|
|
114
|
-
time_ranges : Create a column of time ranges.
|
|
115
|
-
|
|
116
|
-
Examples
|
|
117
|
-
--------
|
|
118
|
-
>>> from datetime import time, timedelta
|
|
119
|
-
>>> pl.time_range(
|
|
120
|
-
... start=time(14, 0),
|
|
121
|
-
... interval=timedelta(hours=3, minutes=15),
|
|
122
|
-
... eager=True,
|
|
123
|
-
... ).alias("time")
|
|
124
|
-
shape: (4,)
|
|
125
|
-
Series: 'time' [time]
|
|
126
|
-
[
|
|
127
|
-
14:00:00
|
|
128
|
-
17:15:00
|
|
129
|
-
20:30:00
|
|
130
|
-
23:45:00
|
|
131
|
-
]
|
|
132
|
-
"""
|
|
133
|
-
interval = parse_interval_argument(interval)
|
|
134
|
-
for unit in ("y", "mo", "w", "d"):
|
|
135
|
-
if unit in interval:
|
|
136
|
-
msg = f"invalid interval unit for time_range: found {unit!r}"
|
|
137
|
-
raise ValueError(msg)
|
|
138
|
-
|
|
139
|
-
if start is None:
|
|
140
|
-
start = time(0, 0, 0)
|
|
141
|
-
if end is None:
|
|
142
|
-
end = time(23, 59, 59, 999999)
|
|
143
|
-
|
|
144
|
-
start_pyexpr = parse_into_expression(start)
|
|
145
|
-
end_pyexpr = parse_into_expression(end)
|
|
146
|
-
|
|
147
|
-
result = wrap_expr(plr.time_range(start_pyexpr, end_pyexpr, interval, closed))
|
|
148
|
-
|
|
149
|
-
if eager:
|
|
150
|
-
return F.select(result).to_series()
|
|
151
|
-
|
|
152
|
-
return result
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
@overload
|
|
156
|
-
def time_ranges(
|
|
157
|
-
start: time | IntoExprColumn | None = ...,
|
|
158
|
-
end: time | IntoExprColumn | None = ...,
|
|
159
|
-
interval: str | timedelta = ...,
|
|
160
|
-
*,
|
|
161
|
-
closed: ClosedInterval = ...,
|
|
162
|
-
eager: Literal[False] = ...,
|
|
163
|
-
) -> Expr: ...
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
@overload
|
|
167
|
-
def time_ranges(
|
|
168
|
-
start: time | IntoExprColumn | None = ...,
|
|
169
|
-
end: time | IntoExprColumn | None = ...,
|
|
170
|
-
interval: str | timedelta = ...,
|
|
171
|
-
*,
|
|
172
|
-
closed: ClosedInterval = ...,
|
|
173
|
-
eager: Literal[True],
|
|
174
|
-
) -> Series: ...
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
@overload
|
|
178
|
-
def time_ranges(
|
|
179
|
-
start: time | IntoExprColumn | None = ...,
|
|
180
|
-
end: time | IntoExprColumn | None = ...,
|
|
181
|
-
interval: str | timedelta = ...,
|
|
182
|
-
*,
|
|
183
|
-
closed: ClosedInterval = ...,
|
|
184
|
-
eager: bool,
|
|
185
|
-
) -> Series | Expr: ...
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
def time_ranges(
|
|
189
|
-
start: time | IntoExprColumn | None = None,
|
|
190
|
-
end: time | IntoExprColumn | None = None,
|
|
191
|
-
interval: str | timedelta = "1h",
|
|
192
|
-
*,
|
|
193
|
-
closed: ClosedInterval = "both",
|
|
194
|
-
eager: bool = False,
|
|
195
|
-
) -> Series | Expr:
|
|
196
|
-
"""
|
|
197
|
-
Create a column of time ranges.
|
|
198
|
-
|
|
199
|
-
Parameters
|
|
200
|
-
----------
|
|
201
|
-
start
|
|
202
|
-
Lower bound of the time range.
|
|
203
|
-
If omitted, defaults to `time(0, 0, 0, 0)`.
|
|
204
|
-
end
|
|
205
|
-
Upper bound of the time range.
|
|
206
|
-
If omitted, defaults to `time(23, 59, 59, 999999)`.
|
|
207
|
-
interval
|
|
208
|
-
Interval of the range periods, specified as a Python `timedelta` object
|
|
209
|
-
or using the Polars duration string language (see "Notes" section below).
|
|
210
|
-
closed : {'both', 'left', 'right', 'none'}
|
|
211
|
-
Define which sides of the range are closed (inclusive).
|
|
212
|
-
eager
|
|
213
|
-
Evaluate immediately and return a `Series`.
|
|
214
|
-
If set to `False` (default), return an expression instead.
|
|
215
|
-
|
|
216
|
-
Returns
|
|
217
|
-
-------
|
|
218
|
-
Expr or Series
|
|
219
|
-
Column of data type `List(Time)`.
|
|
220
|
-
|
|
221
|
-
Notes
|
|
222
|
-
-----
|
|
223
|
-
`interval` is created according to the following string language:
|
|
224
|
-
|
|
225
|
-
- 1ns (1 nanosecond)
|
|
226
|
-
- 1us (1 microsecond)
|
|
227
|
-
- 1ms (1 millisecond)
|
|
228
|
-
- 1s (1 second)
|
|
229
|
-
- 1m (1 minute)
|
|
230
|
-
- 1h (1 hour)
|
|
231
|
-
- 1d (1 calendar day)
|
|
232
|
-
- 1w (1 calendar week)
|
|
233
|
-
- 1mo (1 calendar month)
|
|
234
|
-
- 1q (1 calendar quarter)
|
|
235
|
-
- 1y (1 calendar year)
|
|
236
|
-
|
|
237
|
-
Or combine them:
|
|
238
|
-
"3d12h4m25s" # 3 days, 12 hours, 4 minutes, and 25 seconds
|
|
239
|
-
|
|
240
|
-
By "calendar day", we mean the corresponding time on the next day (which may
|
|
241
|
-
not be 24 hours, due to daylight savings). Similarly for "calendar week",
|
|
242
|
-
"calendar month", "calendar quarter", and "calendar year".
|
|
243
|
-
|
|
244
|
-
See Also
|
|
245
|
-
--------
|
|
246
|
-
time_range : Generate a single time range.
|
|
247
|
-
|
|
248
|
-
Examples
|
|
249
|
-
--------
|
|
250
|
-
>>> from datetime import time
|
|
251
|
-
>>> df = pl.DataFrame(
|
|
252
|
-
... {
|
|
253
|
-
... "start": [time(9, 0), time(10, 0)],
|
|
254
|
-
... "end": time(11, 0),
|
|
255
|
-
... }
|
|
256
|
-
... )
|
|
257
|
-
>>> df.with_columns(time_range=pl.time_ranges("start", "end"))
|
|
258
|
-
shape: (2, 3)
|
|
259
|
-
┌──────────┬──────────┬────────────────────────────────┐
|
|
260
|
-
│ start ┆ end ┆ time_range │
|
|
261
|
-
│ --- ┆ --- ┆ --- │
|
|
262
|
-
│ time ┆ time ┆ list[time] │
|
|
263
|
-
╞══════════╪══════════╪════════════════════════════════╡
|
|
264
|
-
│ 09:00:00 ┆ 11:00:00 ┆ [09:00:00, 10:00:00, 11:00:00] │
|
|
265
|
-
│ 10:00:00 ┆ 11:00:00 ┆ [10:00:00, 11:00:00] │
|
|
266
|
-
└──────────┴──────────┴────────────────────────────────┘
|
|
267
|
-
"""
|
|
268
|
-
interval = parse_interval_argument(interval)
|
|
269
|
-
for unit in ("y", "mo", "w", "d"):
|
|
270
|
-
if unit in interval:
|
|
271
|
-
msg = f"invalid interval unit for time_range: found {unit!r}"
|
|
272
|
-
raise ValueError(msg)
|
|
273
|
-
|
|
274
|
-
if start is None:
|
|
275
|
-
start = time(0, 0, 0)
|
|
276
|
-
if end is None:
|
|
277
|
-
end = time(23, 59, 59, 999999)
|
|
278
|
-
|
|
279
|
-
start_pyexpr = parse_into_expression(start)
|
|
280
|
-
end_pyexpr = parse_into_expression(end)
|
|
281
|
-
|
|
282
|
-
result = wrap_expr(plr.time_ranges(start_pyexpr, end_pyexpr, interval, closed))
|
|
283
|
-
|
|
284
|
-
if eager:
|
|
285
|
-
return F.select(result).to_series()
|
|
286
|
-
|
|
287
|
-
return result
|