Skip to content

Commit 69059e8

Browse files
TST: fixed cython doctests (#43768)
1 parent 9179081 commit 69059e8

10 files changed

+42
-28
lines changed

ci/code_checks.sh

+4
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,10 @@ if [[ -z "$CHECK" || "$CHECK" == "doctests" ]]; then
8484
pandas/tseries/
8585
RET=$(($RET + $?)) ; echo $MSG "DONE"
8686

87+
MSG='Cython Doctests' ; echo $MSG
88+
python -m pytest --doctest-cython pandas/_libs
89+
RET=$(($RET + $?)) ; echo $MSG "DONE"
90+
8791
fi
8892

8993
### DOCSTRINGS ###

environment.yml

+1
Original file line numberDiff line numberDiff line change
@@ -122,3 +122,4 @@ dependencies:
122122
- types-PyMySQL
123123
- types-pytz
124124
- types-setuptools
125+
- pytest-cython

pandas/_libs/hashtable.pyx

+5-3
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,8 @@ cdef class ObjectFactorizer(Factorizer):
9898
--------
9999
Factorize values with nans replaced by na_sentinel
100100

101-
>>> factorize(np.array([1,2,np.nan], dtype='O'), na_sentinel=20)
101+
>>> fac = ObjectFactorizer(3)
102+
>>> fac.factorize(np.array([1,2,np.nan], dtype='O'), na_sentinel=20)
102103
array([ 0, 1, 20])
103104
"""
104105
cdef:
@@ -142,8 +143,9 @@ cdef class Int64Factorizer(Factorizer):
142143
--------
143144
Factorize values with nans replaced by na_sentinel
144145

145-
>>> factorize(np.array([1,2,np.nan], dtype='O'), na_sentinel=20)
146-
array([ 0, 1, 20])
146+
>>> fac = Int64Factorizer(3)
147+
>>> fac.factorize(np.array([1,2,3]), na_sentinel=20)
148+
array([0, 1, 2])
147149
"""
148150
cdef:
149151
ndarray[intp_t] labels

pandas/_libs/lib.pyx

+6-2
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,7 @@ def is_scalar(val: object) -> bool:
175175

176176
Examples
177177
--------
178+
>>> import datetime
178179
>>> dt = datetime.datetime(2018, 10, 3)
179180
>>> pd.api.types.is_scalar(dt)
180181
True
@@ -256,11 +257,12 @@ def is_iterator(obj: object) -> bool:
256257

257258
Examples
258259
--------
260+
>>> import datetime
259261
>>> is_iterator((x for x in []))
260262
True
261263
>>> is_iterator([1, 2, 3])
262264
False
263-
>>> is_iterator(datetime(2017, 1, 1))
265+
>>> is_iterator(datetime.datetime(2017, 1, 1))
264266
False
265267
>>> is_iterator("foo")
266268
False
@@ -1076,11 +1078,12 @@ def is_list_like(obj: object, allow_sets: bool = True) -> bool:
10761078

10771079
Examples
10781080
--------
1081+
>>> import datetime
10791082
>>> is_list_like([1, 2, 3])
10801083
True
10811084
>>> is_list_like({1, 2, 3})
10821085
True
1083-
>>> is_list_like(datetime(2017, 1, 1))
1086+
>>> is_list_like(datetime.datetime(2017, 1, 1))
10841087
False
10851088
>>> is_list_like("foo")
10861089
False
@@ -1355,6 +1358,7 @@ def infer_dtype(value: object, skipna: bool = True) -> str:
13551358

13561359
Examples
13571360
--------
1361+
>>> import datetime
13581362
>>> infer_dtype(['foo', 'bar'])
13591363
'string'
13601364

pandas/_libs/tslibs/dtypes.pyx

+2-2
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ class Resolution(Enum):
227227
Examples
228228
--------
229229
>>> Resolution.from_attrname('second')
230-
2
230+
<Resolution.RESO_SEC: 3>
231231

232232
>>> Resolution.from_attrname('second') == Resolution.RESO_SEC
233233
True
@@ -244,7 +244,7 @@ class Resolution(Enum):
244244
Examples
245245
--------
246246
>>> Resolution.get_reso_from_freq('H')
247-
4
247+
<Resolution.RESO_HR: 5>
248248

249249
>>> Resolution.get_reso_from_freq('H') == Resolution.RESO_HR
250250
True

pandas/_libs/tslibs/nattype.pyx

+3-3
Original file line numberDiff line numberDiff line change
@@ -581,7 +581,7 @@ class NaTType(_NaT):
581581
582582
Examples
583583
--------
584-
>>> pd.Timestamp.utcnow()
584+
>>> pd.Timestamp.utcnow() # doctest: +SKIP
585585
Timestamp('2020-11-16 22:50:18.092888+0000', tz='UTC')
586586
""",
587587
)
@@ -705,7 +705,7 @@ class NaTType(_NaT):
705705
706706
Examples
707707
--------
708-
>>> pd.Timestamp.now()
708+
>>> pd.Timestamp.now() # doctest: +SKIP
709709
Timestamp('2020-11-16 22:06:16.378782')
710710
711711
Analogous for ``pd.NaT``:
@@ -730,7 +730,7 @@ class NaTType(_NaT):
730730
731731
Examples
732732
--------
733-
>>> pd.Timestamp.today()
733+
>>> pd.Timestamp.today() # doctest: +SKIP
734734
Timestamp('2020-11-16 22:37:39.969883')
735735
736736
Analogous for ``pd.NaT``:

pandas/_libs/tslibs/period.pyx

+1-1
Original file line numberDiff line numberDiff line change
@@ -2375,7 +2375,7 @@ cdef class _Period(PeriodMixin):
23752375
>>>
23762376
>>> a = Period(freq='D', year=2001, month=1, day=1)
23772377
>>> a.strftime('%d-%b-%Y')
2378-
'01-Jan-2006'
2378+
'01-Jan-2001'
23792379
>>> a.strftime('%b. %d, %Y was a %A')
23802380
'Jan. 01, 2001 was a Monday'
23812381
"""

pandas/_libs/tslibs/timestamps.pyx

+12-8
Original file line numberDiff line numberDiff line change
@@ -909,16 +909,20 @@ cdef class _Timestamp(ABCTimestamp):
909909
Examples
910910
--------
911911
>>> ts = pd.Timestamp('2020-03-14T15:32:52.192548651')
912-
>>> ts.to_period(freq='Y) # Year end frequency
913-
numpy.datetime64('2020-03-14T15:32:52.192548651')
912+
>>> # Year end frequency
913+
>>> ts.to_period(freq='Y')
914+
Period('2020', 'A-DEC')
914915
915-
>>> ts.to_period(freq='M') # Month end frequency
916+
>>> # Month end frequency
917+
>>> ts.to_period(freq='M')
916918
Period('2020-03', 'M')
917919
918-
>>> ts.to_period(freq='W') # Weekly frequency
920+
>>> # Weekly frequency
921+
>>> ts.to_period(freq='W')
919922
Period('2020-03-09/2020-03-15', 'W-SUN')
920923
921-
>>> ts.to_period(freq='Q') # Quarter end frequency
924+
>>> # Quarter end frequency
925+
>>> ts.to_period(freq='Q')
922926
Period('2020Q1', 'Q-DEC')
923927
"""
924928
from pandas import Period
@@ -1059,7 +1063,7 @@ class Timestamp(_Timestamp):
10591063
10601064
Examples
10611065
--------
1062-
>>> pd.Timestamp.now()
1066+
>>> pd.Timestamp.now() # doctest: +SKIP
10631067
Timestamp('2020-11-16 22:06:16.378782')
10641068
10651069
Analogous for ``pd.NaT``:
@@ -1087,7 +1091,7 @@ class Timestamp(_Timestamp):
10871091
10881092
Examples
10891093
--------
1090-
>>> pd.Timestamp.today()
1094+
>>> pd.Timestamp.today() # doctest: +SKIP
10911095
Timestamp('2020-11-16 22:37:39.969883')
10921096
10931097
Analogous for ``pd.NaT``:
@@ -1106,7 +1110,7 @@ class Timestamp(_Timestamp):
11061110
11071111
Examples
11081112
--------
1109-
>>> pd.Timestamp.utcnow()
1113+
>>> pd.Timestamp.utcnow() # doctest: +SKIP
11101114
Timestamp('2020-11-16 22:50:18.092888+0000', tz='UTC')
11111115
"""
11121116
return cls.now(UTC)

pandas/_libs/tslibs/timezones.pyx

+7-9
Original file line numberDiff line numberDiff line change
@@ -385,25 +385,23 @@ def tz_standardize(tz: tzinfo) -> tzinfo:
385385
-------
386386
tzinfo
387387

388-
Examples:
388+
Examples
389389
--------
390+
>>> from datetime import datetime
391+
>>> from pytz import timezone
392+
>>> tz = timezone('US/Pacific').normalize(
393+
... datetime(2014, 1, 1, tzinfo=pytz.utc)
394+
... ).tzinfo
390395
>>> tz
391396
<DstTzInfo 'US/Pacific' PST-1 day, 16:00:00 STD>
392-
393397
>>> tz_standardize(tz)
394398
<DstTzInfo 'US/Pacific' LMT-1 day, 16:07:00 STD>
395399

400+
>>> tz = timezone('US/Pacific')
396401
>>> tz
397402
<DstTzInfo 'US/Pacific' LMT-1 day, 16:07:00 STD>
398-
399403
>>> tz_standardize(tz)
400404
<DstTzInfo 'US/Pacific' LMT-1 day, 16:07:00 STD>
401-
402-
>>> tz
403-
dateutil.tz.tz.tzutc
404-
405-
>>> tz_standardize(tz)
406-
dateutil.tz.tz.tzutc
407405
"""
408406
if treat_tz_as_pytz(tz):
409407
return pytz.timezone(str(tz))

requirements-dev.txt

+1
Original file line numberDiff line numberDiff line change
@@ -85,4 +85,5 @@ types-python-dateutil
8585
types-PyMySQL
8686
types-pytz
8787
types-setuptools
88+
pytest-cython
8889
setuptools>=51.0.0

0 commit comments

Comments
 (0)