dycw-utilities 0.151.3__py3-none-any.whl → 0.151.4__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,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dycw-utilities
3
- Version: 0.151.3
3
+ Version: 0.151.4
4
4
  Author-email: Derek Wan <d.wan@icloud.com>
5
5
  License-File: LICENSE
6
6
  Requires-Python: >=3.12
@@ -1,4 +1,4 @@
1
- utilities/__init__.py,sha256=OsjNsTnhC1azTR-uKfAH73i7Pj7u8seejtRSOgI1LD4,60
1
+ utilities/__init__.py,sha256=AWZG62ObkkWl0zXPWFtqIU5oRl3bsTfN25MpOpwf7Pw,60
2
2
  utilities/altair.py,sha256=92E2lCdyHY4Zb-vCw6rEJIsWdKipuu-Tu2ab1ufUfAk,9079
3
3
  utilities/asyncio.py,sha256=2m2a2C-Qgc6OHTTHL332-t66A7xDITt_SORT7a1DJWo,16792
4
4
  utilities/atomicwrites.py,sha256=xcOWenTBRS0oat3kg7Sqe51AohNThMQ2ixPL7QCG8hw,5795
@@ -47,7 +47,7 @@ utilities/pathlib.py,sha256=FnteXeVeMOSc6QTN7oF6UrobjOX9gXv_5tG1slg83W8,8496
47
47
  utilities/period.py,sha256=hsHdAKAstfMzB2Ar5EbxjkbMff3CA-B5wtYNVZOXVXI,10127
48
48
  utilities/pickle.py,sha256=MBT2xZCsv0pH868IXLGKnlcqNx2IRVKYNpRcqiQQqxw,653
49
49
  utilities/platform.py,sha256=Ue9LSxYvg9yUXGKuz5aZoy_qkUEXde-v6B09exgSctU,2813
50
- utilities/polars.py,sha256=wusyiQTHMxcPrRzsjWWt975rgcMQBRcaY4cJgkNUzw4,72501
50
+ utilities/polars.py,sha256=D9KzxCeLjqfv3dxplJtUuPKkyLbtPVcMHgMxL_im7tI,73313
51
51
  utilities/polars_ols.py,sha256=Uc9V5kvlWZ5cU93lKZ-cfAKdVFFw81tqwLW9PxtUvMs,5618
52
52
  utilities/postgres.py,sha256=xArnonKtL5IR93LpoUYN2U16YswBCJlU5WQkDbv10A0,12553
53
53
  utilities/pottery.py,sha256=u0uvyGgYyujxftEMlsv6ppYTKQoVVjHt5jnVxxYz9s4,6596
@@ -89,8 +89,8 @@ utilities/zoneinfo.py,sha256=oEH-nL3t4h9uawyZqWDtNtDAl6M-CLpLYGI_nI6DulM,1971
89
89
  utilities/pytest_plugins/__init__.py,sha256=U4S_2y3zgLZVfMenHRaJFBW8yqh2mUBuI291LGQVOJ8,35
90
90
  utilities/pytest_plugins/pytest_randomly.py,sha256=NXzCcGKbpgYouz5yehKb4jmxmi2SexKKpgF4M65bi10,414
91
91
  utilities/pytest_plugins/pytest_regressions.py,sha256=Iwhfv_OJH7UCPZCfoh7ugZ2Xjqjil-BBBsOb8sDwiGI,1471
92
- dycw_utilities-0.151.3.dist-info/METADATA,sha256=gyAiyV-Lyw-ikpB81497gJqo-plAE0pcteYpuatGt2M,1696
93
- dycw_utilities-0.151.3.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
94
- dycw_utilities-0.151.3.dist-info/entry_points.txt,sha256=BOD_SoDxwsfJYOLxhrSXhHP_T7iw-HXI9f2WVkzYxvQ,135
95
- dycw_utilities-0.151.3.dist-info/licenses/LICENSE,sha256=gppZp16M6nSVpBbUBrNL6JuYfvKwZiKgV7XoKKsHzqo,1066
96
- dycw_utilities-0.151.3.dist-info/RECORD,,
92
+ dycw_utilities-0.151.4.dist-info/METADATA,sha256=kScCz13Y3Z7tccr7IxJmdugqwfG4c5Mmxfa4TB3XzT4,1696
93
+ dycw_utilities-0.151.4.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
94
+ dycw_utilities-0.151.4.dist-info/entry_points.txt,sha256=BOD_SoDxwsfJYOLxhrSXhHP_T7iw-HXI9f2WVkzYxvQ,135
95
+ dycw_utilities-0.151.4.dist-info/licenses/LICENSE,sha256=gppZp16M6nSVpBbUBrNL6JuYfvKwZiKgV7XoKKsHzqo,1066
96
+ dycw_utilities-0.151.4.dist-info/RECORD,,
utilities/__init__.py CHANGED
@@ -1,3 +1,3 @@
1
1
  from __future__ import annotations
2
2
 
3
- __version__ = "0.151.3"
3
+ __version__ = "0.151.4"
utilities/polars.py CHANGED
@@ -1340,11 +1340,22 @@ def get_data_type_or_series_time_zone(
1340
1340
  dtype = series.dtype
1341
1341
  case _ as never:
1342
1342
  assert_never(never)
1343
- if not isinstance(dtype, Datetime):
1344
- raise _GetDataTypeOrSeriesTimeZoneNotDateTimeError(dtype=dtype)
1345
- if dtype.time_zone is None:
1346
- raise _GetDataTypeOrSeriesTimeZoneNotZonedError(dtype=dtype)
1347
- return ZoneInfo(dtype.time_zone)
1343
+ match dtype:
1344
+ case Datetime() as datetime:
1345
+ if datetime.time_zone is None:
1346
+ raise _GetDataTypeOrSeriesTimeZoneNotZonedError(dtype=datetime)
1347
+ return ZoneInfo(datetime.time_zone)
1348
+ case Struct() as struct:
1349
+ try:
1350
+ return one({
1351
+ get_data_type_or_series_time_zone(f.dtype) for f in struct.fields
1352
+ })
1353
+ except OneNonUniqueError as error:
1354
+ raise _GetDataTypeOrSeriesTimeZoneStructNonUniqueError(
1355
+ dtype=struct, first=error.first, second=error.second
1356
+ ) from None
1357
+ case _:
1358
+ raise _GetDataTypeOrSeriesTimeZoneNotDateTimeError(dtype=dtype)
1348
1359
 
1349
1360
 
1350
1361
  @dataclass(kw_only=True, slots=True)
@@ -1366,6 +1377,18 @@ class _GetDataTypeOrSeriesTimeZoneNotZonedError(GetDataTypeOrSeriesTimeZoneError
1366
1377
  return f"Data type must be zoned; got {self.dtype}"
1367
1378
 
1368
1379
 
1380
+ @dataclass(kw_only=True, slots=True)
1381
+ class _GetDataTypeOrSeriesTimeZoneStructNonUniqueError(
1382
+ GetDataTypeOrSeriesTimeZoneError
1383
+ ):
1384
+ first: ZoneInfo
1385
+ second: ZoneInfo
1386
+
1387
+ @override
1388
+ def __str__(self) -> str:
1389
+ return f"Struct data type must contain exactly one time zone; got {self.first}, {self.second} and perhaps more"
1390
+
1391
+
1369
1392
  ##
1370
1393
 
1371
1394