Skip to content

Commit 9b104ec

Browse files
Remove remaining direct dependency on pytz
1 parent a842ddf commit 9b104ec

File tree

10 files changed

+66
-52
lines changed

10 files changed

+66
-52
lines changed

ci/requirements-py3.10.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ dependencies:
1919
- pytest-rerunfailures
2020
- conda-forge::pytest-remotedata # version in default channel is old
2121
- python=3.10
22-
- pytz
22+
# - pytz
2323
- requests
2424
- scipy >= 1.6.0
2525
- statsmodels

ci/requirements-py3.11.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ dependencies:
1919
- pytest-rerunfailures
2020
- conda-forge::pytest-remotedata # version in default channel is old
2121
- python=3.11
22-
- pytz
22+
# - pytz
2323
- requests
2424
- scipy >= 1.6.0
2525
- statsmodels

ci/requirements-py3.12.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ dependencies:
1919
- pytest-rerunfailures
2020
- conda-forge::pytest-remotedata # version in default channel is old
2121
- python=3.12
22-
- pytz
22+
# - pytz
2323
- requests
2424
- scipy >= 1.6.0
2525
- statsmodels

ci/requirements-py3.9-min.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ dependencies:
99
- pytest-mock
1010
- pytest-timeout
1111
- python=3.9
12-
- pytz
12+
# - pytz
1313
- requests
1414
- pip:
1515
- h5py==3.0.0

ci/requirements-py3.9.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ dependencies:
1919
- pytest-rerunfailures
2020
- conda-forge::pytest-remotedata # version in default channel is old
2121
- python=3.9
22-
- pytz
22+
# - pytz
2323
- requests
2424
- scipy >= 1.6.0
2525
- statsmodels

docs/tutorials/solarposition.ipynb

Lines changed: 16 additions & 16 deletions
Large diffs are not rendered by default.

pvlib/location.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@
1010

1111
import h5py
1212
import pandas as pd
13-
import pytz
13+
# import pytz
1414

1515
from pvlib import atmosphere, clearsky, irradiance, solarposition
16-
from pvlib._deprecation import warn_deprecated
16+
# from pvlib._deprecation import warn_deprecated
1717
from pvlib.tools import _degrees_to_index
1818

1919

@@ -90,14 +90,14 @@ def __init__(
9090
self.tz = tz
9191
elif isinstance(tz, datetime.timezone):
9292
self.tz = ZoneInfo(str(tz))
93-
elif isinstance(tz, pytz.BaseTzInfo):
94-
warn_deprecated(
95-
"0.11.3",
96-
message='pytz timezones are deprecated',
97-
alternative='use zoneinfo.ZoneInfo from the standard library',
98-
obj_type='function argument type',
99-
)
100-
self.tz = ZoneInfo(tz.zone)
93+
# elif isinstance(tz, pytz.BaseTzInfo):
94+
# warn_deprecated(
95+
# "0.11.3",
96+
# message='pytz-based timezones are deprecated for locations',
97+
# alternative='use zoneinfo.ZoneInfo from the standard library',
98+
# obj_type='function argument type',
99+
# )
100+
# self.tz = ZoneInfo(tz.zone)
101101
else:
102102
raise TypeError(f'Invalid tz specification: {tz}')
103103

pvlib/tests/test_location.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from .conftest import assert_frame_equal, assert_index_equal
99

1010
import pytest
11-
import pytz
11+
# import pytz
1212

1313
import pvlib
1414
from pvlib import location
@@ -26,10 +26,17 @@ def test_location_all():
2626
Location(32.2, -111, 'US/Arizona', 700, 'Tucson')
2727

2828

29-
@pytest.mark.parametrize('tz', [
30-
pytz.timezone('US/Arizona'), ZoneInfo('US/Arizona'), 'America/Phoenix',
31-
-7, -7.0, datetime.timezone.utc
32-
])
29+
@pytest.mark.parametrize(
30+
'tz',
31+
[
32+
# pytz.timezone('US/Arizona'),
33+
ZoneInfo('US/Arizona'),
34+
'America/Phoenix',
35+
-7,
36+
-7.0,
37+
datetime.timezone.utc,
38+
]
39+
)
3340
def test_location_tz(tz):
3441
Location(32.2, -111, tz)
3542

pvlib/tests/test_solarposition.py

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,21 @@
11
import calendar
22
import datetime
33
import warnings
4+
import zoneinfo
45

56
import numpy as np
6-
import pandas as pd
7-
8-
from .conftest import assert_frame_equal, assert_series_equal
97
from numpy.testing import assert_allclose
8+
import pandas as pd
109
import pytest
11-
import pytz
1210

13-
from pvlib.location import Location
1411
from pvlib import solarposition, spa
15-
16-
from .conftest import (
17-
requires_ephem, requires_spa_c, requires_numba, requires_pandas_2_0
12+
from pvlib.location import Location
13+
from pvlib.tests.conftest import (
14+
assert_frame_equal, assert_series_equal, requires_ephem, requires_spa_c,
15+
requires_numba, requires_pandas_2_0,
1816
)
1917

18+
2019
# setup times and locations to be tested.
2120
times = pd.date_range(start=datetime.datetime(2014, 6, 24),
2221
end=datetime.datetime(2014, 6, 26), freq='15min')
@@ -348,13 +347,12 @@ def test_calc_time():
348347
# validation from USNO solar position calculator online
349348

350349
epoch = datetime.datetime(1970, 1, 1)
351-
epoch_dt = pytz.utc.localize(epoch)
350+
epoch_dt = epoch.replace(tzinfo=zoneinfo.ZoneInfo("UTC"))
352351

353352
loc = tus
354-
actual_time = pytz.timezone(loc.tz).localize(
355-
datetime.datetime(2014, 10, 10, 8, 30))
356-
lb = pytz.timezone(loc.tz).localize(datetime.datetime(2014, 10, 10, tol))
357-
ub = pytz.timezone(loc.tz).localize(datetime.datetime(2014, 10, 10, 10))
353+
actual_time = datetime.datetime(2014, 10, 10, 8, 30, tzinfo=loc.tz)
354+
lb = datetime.datetime(2014, 10, 10, tol, tzinfo=loc.tz)
355+
ub = datetime.datetime(2014, 10, 10, 10, tzinfo=loc.tz)
358356
alt = solarposition.calc_time(lb, ub, loc.latitude, loc.longitude,
359357
'alt', math.radians(24.7))
360358
az = solarposition.calc_time(lb, ub, loc.latitude, loc.longitude,
@@ -724,9 +722,12 @@ def test_hour_angle_with_tricky_timezones():
724722
'2014-09-07 02:00:00',
725723
]).tz_localize('America/Santiago', nonexistent='shift_forward')
726724

727-
with pytest.raises(pytz.exceptions.NonExistentTimeError):
725+
# should raise `pytz.exceptions.NonExistentTimeError`
726+
with pytest.raises(Exception, match="2014-09-07 00:00:00") as exc_info:
728727
times.normalize()
729728

729+
assert exc_info.type.__name__ == "NonExistentTimeError"
730+
730731
# should not raise `pytz.exceptions.NonExistentTimeError`
731732
solarposition.hour_angle(times, longitude, eot)
732733

@@ -738,9 +739,15 @@ def test_hour_angle_with_tricky_timezones():
738739
'2014-11-02 02:00:00',
739740
]).tz_localize('America/Havana', ambiguous=[True, True, False, False])
740741

741-
with pytest.raises(pytz.exceptions.AmbiguousTimeError):
742+
# should raise `pytz.exceptions.AmbiguousTimeError`
743+
with pytest.raises(
744+
Exception,
745+
match="Cannot infer dst time from 2014-11-02 00:00:00",
746+
) as exc_info:
742747
solarposition.hour_angle(times, longitude, eot)
743748

749+
assert exc_info.type.__name__ == "AmbiguousTimeError"
750+
744751

745752
def test_sun_rise_set_transit_geometric(expected_rise_set_spa, golden_mst):
746753
"""Test geometric calculations for sunrise, sunset, and transit times"""

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ dependencies = [
1414
'h5py >=3.12, <4',
1515
'numpy >=1.19.3, <3',
1616
'pandas >=1.3.0, <3',
17-
'pytz',
17+
# 'pytz',
1818
'requests >=2, <3',
1919
'scipy >=1.6.0, <2',
2020
]

0 commit comments

Comments
 (0)