Skip to content

Commit 2c1ed6e

Browse files
committed
DEP: remove pytz (#279)
Co-authored-by: Mike Lync <[email protected]> (cherry picked from commit 03472a4841034b9cd6cd8159728aaf4dc55015ea)
1 parent 60a0ce8 commit 2c1ed6e

File tree

8 files changed

+23
-23
lines changed

8 files changed

+23
-23
lines changed

python/rateslib/curves/academic/sw.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
from uuid import uuid4
1414

1515
import numpy as np
16-
from pytz import UTC
16+
from zoneinfo import ZoneInfo
1717

1818
from rateslib import defaults
1919
from rateslib.curves import (
@@ -414,7 +414,7 @@ def __getitem__(self, date: datetime) -> DualTypes:
414414
return 1.0
415415

416416
# 31557600 = 365.25 days * 86400 seconds per day
417-
t = (date.replace(tzinfo=UTC).timestamp() - self.nodes.posix_keys[0]) / 31557600.0
417+
t = (date.replace(tzinfo=ZoneInfo("UTC")).timestamp() - self.nodes.posix_keys[0]) / 31557600.0
418418
a = self.alpha
419419
w = self.w
420420

python/rateslib/curves/curves.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525

2626
import numpy as np
2727
from pandas import Series
28-
from pytz import UTC
28+
from zoneinfo import ZoneInfo
2929

3030
import rateslib.errors as err
3131
from rateslib import defaults, fixings
@@ -269,7 +269,7 @@ def __getitem__(self, date: datetime) -> DualTypes:
269269
if self.interpolator.spline is None or date < self.interpolator.spline.t[0]:
270270
val = self.interpolator.local_func(date, self)
271271
else:
272-
date_posix = date.replace(tzinfo=UTC).timestamp()
272+
date_posix = date.replace(tzinfo=ZoneInfo("UTC")).timestamp()
273273
if date > self.interpolator.spline.t[-1]:
274274
warnings.warn(
275275
"Evaluating points on a curve beyond the endpoint of the basic "

python/rateslib/curves/interpolation.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
from math import floor
1616
from typing import TYPE_CHECKING, Protocol
1717

18-
from pytz import UTC
18+
from zoneinfo import ZoneInfo
1919

2020
from rateslib.dual import dual_exp, dual_log
2121
from rateslib.rs import index_left_f64
@@ -137,7 +137,7 @@ def _get_posix(date: datetime, curve: _BaseCurve) -> tuple[float, float, float,
137137
"""
138138
Convert a datetime and curve_nodes to posix timestamps and return the index_left.
139139
"""
140-
date_posix: float = date.replace(tzinfo=UTC).timestamp()
140+
date_posix: float = date.replace(tzinfo=ZoneInfo("UTC")).timestamp()
141141
l_index = index_left_f64(curve.nodes.posix_keys, date_posix, None)
142142
node_left_posix, node_right_posix = (
143143
curve.nodes.posix_keys[l_index],

python/rateslib/curves/utils.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
from functools import cached_property
2020
from typing import TYPE_CHECKING
2121

22-
from pytz import UTC
22+
from zoneinfo import ZoneInfo
2323

2424
from rateslib import defaults
2525
from rateslib.curves.interpolation import INTERPOLATION, InterpolationFunction
@@ -192,7 +192,7 @@ def t(self) -> list[datetime]:
192192
@cached_property
193193
def t_posix(self) -> list[float]:
194194
"""The knot sequence of the PPSpline converted to float unix timestamps."""
195-
return [_.replace(tzinfo=UTC).timestamp() for _ in self.t]
195+
return [_.replace(tzinfo=ZoneInfo("UTC")).timestamp() for _ in self.t]
196196

197197
@property
198198
def spline(self) -> PPSplineF64 | PPSplineDual | PPSplineDual2 | None:
@@ -209,7 +209,7 @@ def endpoints(self) -> tuple[str, str]:
209209
# All calling methods should clear the cache and/or set new state after `_csolve`
210210
def _csolve(self, curve_type: _CurveType, nodes: _CurveNodes, ad: int) -> None:
211211
t_posix = self.t_posix.copy()
212-
tau_posix = [k.replace(tzinfo=UTC).timestamp() for k in nodes.keys if k >= self.t[0]]
212+
tau_posix = [k.replace(tzinfo=ZoneInfo("UTC")).timestamp() for k in nodes.keys if k >= self.t[0]]
213213
if curve_type == _CurveType.dfs:
214214
# then use log
215215
y = [dual_log(v) for k, v in nodes.nodes.items() if k >= self.t[0]]
@@ -530,7 +530,7 @@ def n(self) -> int:
530530
@cached_property
531531
def posix_keys(self) -> list[float]:
532532
"""A list of the ``keys`` converted to unix timestamps."""
533-
return [_.replace(tzinfo=UTC).timestamp() for _ in self.keys]
533+
return [_.replace(tzinfo=ZoneInfo("UTC")).timestamp() for _ in self.keys]
534534

535535
@property
536536
def initial(self) -> datetime:

python/rateslib/fx_volatility/delta_vol.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
import numpy as np
2121
from pandas import Series
22-
from pytz import UTC
22+
from zoneinfo import ZoneInfo
2323

2424
from rateslib import defaults
2525
from rateslib.default import (
@@ -737,7 +737,7 @@ def get_smile(self, expiry: datetime) -> FXDeltaVolSmile:
737737
if defaults.curve_caching and expiry in self._cache:
738738
return self._cache[expiry]
739739

740-
expiry_posix = expiry.replace(tzinfo=UTC).timestamp()
740+
expiry_posix = expiry.replace(tzinfo=ZoneInfo("UTC")).timestamp()
741741
e_idx, e_next_idx = _surface_index_left(self.meta.expiries_posix, expiry_posix)
742742

743743
if expiry == self.meta.expiries[0]:

python/rateslib/fx_volatility/sabr.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818

1919
import numpy as np
2020
from pandas import Series
21-
from pytz import UTC
21+
from zoneinfo import ZoneInfo
2222

2323
from rateslib import defaults
2424
from rateslib.dual import (
@@ -693,7 +693,7 @@ def _d_sabr_d_k_or_f(
693693
as_float: bool,
694694
derivative: int,
695695
) -> tuple[DualTypes, DualTypes | None]:
696-
expiry_posix = expiry.replace(tzinfo=UTC).timestamp()
696+
expiry_posix = expiry.replace(tzinfo=ZoneInfo("UTC")).timestamp()
697697
e_idx, e_next_idx = _surface_index_left(self.meta.expiries_posix, expiry_posix)
698698

699699
if expiry == self.meta.expiries[0]:

python/rateslib/fx_volatility/utils.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
from typing import TYPE_CHECKING, TypeAlias
2020

2121
from pandas import Series
22-
from pytz import UTC
22+
from zoneinfo import ZoneInfo
2323

2424
from rateslib.dual import (
2525
Dual,
@@ -353,7 +353,7 @@ def expiries(self) -> list[datetime]:
353353
@cached_property
354354
def expiries_posix(self) -> list[float]:
355355
"""A list of the unix timestamps of each date in ``expiries``."""
356-
return [_.replace(tzinfo=UTC).timestamp() for _ in self.expiries]
356+
return [_.replace(tzinfo=ZoneInfo("UTC")).timestamp() for _ in self.expiries]
357357

358358
@property
359359
def weights(self) -> Series[float] | None:
@@ -377,7 +377,7 @@ def eval_date(self) -> datetime:
377377
@property
378378
def eval_posix(self) -> float:
379379
"""The unix timestamp of the ``eval_date``."""
380-
return self.eval_date.replace(tzinfo=UTC).timestamp()
380+
return self.eval_date.replace(tzinfo=ZoneInfo("UTC")).timestamp()
381381

382382
@property
383383
def delta_type(self) -> FXDeltaMethod:
@@ -471,12 +471,12 @@ def expiries(self) -> list[datetime]:
471471
@cached_property
472472
def expiries_posix(self) -> list[float]:
473473
"""A list of the unix timestamps of each date in ``expiries``."""
474-
return [_.replace(tzinfo=UTC).timestamp() for _ in self.expiries]
474+
return [_.replace(tzinfo=ZoneInfo("UTC")).timestamp() for _ in self.expiries]
475475

476476
@cached_property
477477
def eval_posix(self) -> float:
478478
"""The unix timestamp of the ``eval_date``."""
479-
return self.eval_date.replace(tzinfo=UTC).timestamp()
479+
return self.eval_date.replace(tzinfo=ZoneInfo("UTC")).timestamp()
480480

481481
@property
482482
def delivery_lag(self) -> int:
@@ -621,7 +621,7 @@ def _t_var_interp_d_sabr_d_k_or_f(
621621
else: # bounds_flag == 1:
622622
# right side extrapolation
623623
t1 = expiries_posix[expiry_next_index] - eval_posix
624-
t2 = TERMINAL_DATE.replace(tzinfo=UTC).timestamp() - eval_posix
624+
t2 = TERMINAL_DATE.replace(tzinfo=ZoneInfo("UTC")).timestamp() - eval_posix
625625

626626
t_hat = expiry_posix - eval_posix
627627
t = expiry_posix - eval_posix

python/rateslib/periods/fx_volatility.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
from typing import TYPE_CHECKING
1616

1717
import numpy as np
18-
from pytz import UTC
18+
from zoneinfo import ZoneInfo
1919

2020
import rateslib.errors as err
2121
from rateslib import defaults
@@ -566,7 +566,7 @@ def root1d(
566566
alpha = vol.nodes.alpha
567567
else: # FXSabrSurface
568568
vol_: FXSabrSurface = vol # type: ignore[assignment]
569-
expiry_posix = self.fx_option_params.expiry.replace(tzinfo=UTC).timestamp()
569+
expiry_posix = self.fx_option_params.expiry.replace(tzinfo=ZoneInfo("UTC")).timestamp()
570570
e_idx, _ = _surface_index_left(vol_.meta.expiries_posix, expiry_posix)
571571
alpha = vol_.smiles[e_idx].nodes.alpha
572572

@@ -821,7 +821,7 @@ def root1d(
821821
alpha = vol.nodes.alpha
822822
else: # FXSabrSurface
823823
vol_: FXSabrSurface = vol # type: ignore[assignment]
824-
expiry_posix = self.fx_option_params.expiry.replace(tzinfo=UTC).timestamp()
824+
expiry_posix = self.fx_option_params.expiry.replace(tzinfo=ZoneInfo("UTC")).timestamp()
825825
e_idx, _ = _surface_index_left(vol_.meta.expiries_posix, expiry_posix)
826826
alpha = vol_.smiles[e_idx].nodes.alpha
827827

0 commit comments

Comments
 (0)