Skip to content

Commit 3728a70

Browse files
ShaharNavehproost
authored andcommitted
CLN:F-string in pandas/_libs/tslibs/*.pyx (pandas-dev#29775)
1 parent a3b0a3d commit 3728a70

14 files changed

+127
-158
lines changed

pandas/_libs/tslibs/c_timestamp.pyx

+11-13
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,11 @@ def maybe_integer_op_deprecated(obj):
5555
# GH#22535 add/sub of integers and int-arrays is deprecated
5656
if obj.freq is not None:
5757
warnings.warn("Addition/subtraction of integers and integer-arrays "
58-
"to {cls} is deprecated, will be removed in a future "
58+
f"to {type(obj).__name__} is deprecated, "
59+
"will be removed in a future "
5960
"version. Instead of adding/subtracting `n`, use "
6061
"`n * self.freq`"
61-
.format(cls=type(obj).__name__),
62-
FutureWarning)
62+
, FutureWarning)
6363

6464

6565
cdef class _Timestamp(datetime):
@@ -144,11 +144,10 @@ cdef class _Timestamp(datetime):
144144
# e.g. tzlocal has no `strftime`
145145
pass
146146

147-
tz = ", tz='{0}'".format(zone) if zone is not None else ""
148-
freq = "" if self.freq is None else ", freq='{0}'".format(self.freqstr)
147+
tz = f", tz='{zone}'" if zone is not None else ""
148+
freq = "" if self.freq is None else f", freq='{self.freqstr}'"
149149

150-
return "Timestamp('{stamp}'{tz}{freq})".format(stamp=stamp,
151-
tz=tz, freq=freq)
150+
return f"Timestamp('{stamp}'{tz}{freq})"
152151

153152
cdef bint _compare_outside_nanorange(_Timestamp self, datetime other,
154153
int op) except -1:
@@ -370,23 +369,22 @@ cdef class _Timestamp(datetime):
370369

371370
@property
372371
def _repr_base(self) -> str:
373-
return '{date} {time}'.format(date=self._date_repr,
374-
time=self._time_repr)
372+
return f"{self._date_repr} {self._time_repr}"
375373

376374
@property
377375
def _date_repr(self) -> str:
378376
# Ideal here would be self.strftime("%Y-%m-%d"), but
379377
# the datetime strftime() methods require year >= 1900
380-
return '%d-%.2d-%.2d' % (self.year, self.month, self.day)
378+
return f'{self.year}-{self.month:02d}-{self.day:02d}'
381379

382380
@property
383381
def _time_repr(self) -> str:
384-
result = '%.2d:%.2d:%.2d' % (self.hour, self.minute, self.second)
382+
result = f'{self.hour:02d}:{self.minute:02d}:{self.second:02d}'
385383

386384
if self.nanosecond != 0:
387-
result += '.%.9d' % (self.nanosecond + 1000 * self.microsecond)
385+
result += f'.{self.nanosecond + 1000 * self.microsecond:09d}'
388386
elif self.microsecond != 0:
389-
result += '.%.6d' % self.microsecond
387+
result += f'.{self.microsecond:06d}'
390388

391389
return result
392390

pandas/_libs/tslibs/conversion.pyx

+4-4
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ def datetime_to_datetime64(object[:] values):
197197
iresult[i] = pydatetime_to_dt64(val, &dts)
198198
check_dts_bounds(&dts)
199199
else:
200-
raise TypeError('Unrecognized value type: %s' % type(val))
200+
raise TypeError(f'Unrecognized value type: {type(val)}')
201201

202202
return result, inferred_tz
203203

@@ -326,8 +326,8 @@ cdef convert_to_tsobject(object ts, object tz, object unit,
326326
raise ValueError("Cannot convert Period to Timestamp "
327327
"unambiguously. Use to_timestamp")
328328
else:
329-
raise TypeError('Cannot convert input [{}] of type {} to '
330-
'Timestamp'.format(ts, type(ts)))
329+
raise TypeError(f'Cannot convert input [{ts}] of type {type(ts)} to '
330+
f'Timestamp')
331331

332332
if tz is not None:
333333
localize_tso(obj, tz)
@@ -686,7 +686,7 @@ def normalize_date(dt: object) -> datetime:
686686
elif PyDate_Check(dt):
687687
return datetime(dt.year, dt.month, dt.day)
688688
else:
689-
raise TypeError('Unrecognized type: %s' % type(dt))
689+
raise TypeError(f'Unrecognized type: {type(dt)}')
690690

691691

692692
@cython.wraparound(False)

pandas/_libs/tslibs/fields.pyx

+5-6
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ def get_date_name_field(const int64_t[:] dtindex, object field, object locale=No
130130
out[i] = names[dts.month].capitalize()
131131

132132
else:
133-
raise ValueError("Field {field} not supported".format(field=field))
133+
raise ValueError(f"Field {field} not supported")
134134

135135
return out
136136

@@ -165,8 +165,7 @@ def get_start_end_field(const int64_t[:] dtindex, object field,
165165

166166
if freqstr:
167167
if freqstr == 'C':
168-
raise ValueError("Custom business days is not supported by {field}"
169-
.format(field=field))
168+
raise ValueError(f"Custom business days is not supported by {field}")
170169
is_business = freqstr[0] == 'B'
171170

172171
# YearBegin(), BYearBegin() use month = starting month of year.
@@ -373,7 +372,7 @@ def get_start_end_field(const int64_t[:] dtindex, object field,
373372
out[i] = 1
374373

375374
else:
376-
raise ValueError("Field {field} not supported".format(field=field))
375+
raise ValueError(f"Field {field} not supported")
377376

378377
return out.view(bool)
379378

@@ -537,7 +536,7 @@ def get_date_field(const int64_t[:] dtindex, object field):
537536
elif field == 'is_leap_year':
538537
return isleapyear_arr(get_date_field(dtindex, 'Y'))
539538

540-
raise ValueError("Field {field} not supported".format(field=field))
539+
raise ValueError(f"Field {field} not supported")
541540

542541

543542
@cython.wraparound(False)
@@ -653,7 +652,7 @@ def get_timedelta_field(const int64_t[:] tdindex, object field):
653652
out[i] = tds.nanoseconds
654653
return out
655654

656-
raise ValueError("Field %s not supported" % field)
655+
raise ValueError(f"Field {field} not supported")
657656

658657

659658
cpdef isleapyear_arr(ndarray years):

pandas/_libs/tslibs/frequencies.pyx

+1-1
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ cpdef _base_and_stride(str freqstr):
197197
groups = opattern.match(freqstr)
198198

199199
if not groups:
200-
raise ValueError("Could not evaluate {freq}".format(freq=freqstr))
200+
raise ValueError(f"Could not evaluate {freqstr}")
201201

202202
stride = groups.group(1)
203203

pandas/_libs/tslibs/nattype.pyx

+5-7
Original file line numberDiff line numberDiff line change
@@ -115,8 +115,8 @@ cdef class _NaT(datetime):
115115
if is_datetime64_object(other):
116116
return _nat_scalar_rules[op]
117117
else:
118-
raise TypeError('Cannot compare type %r with type %r' %
119-
(type(self).__name__, type(other).__name__))
118+
raise TypeError(f'Cannot compare type {type(self).__name__} '
119+
f'with type {type(other).__name__}')
120120

121121
# Note: instead of passing "other, self, _reverse_ops[op]", we observe
122122
# that `_nat_scalar_rules` is invariant under `_reverse_ops`,
@@ -150,8 +150,7 @@ cdef class _NaT(datetime):
150150
result = np.empty(other.shape, dtype="datetime64[ns]")
151151
result.fill("NaT")
152152
return result
153-
raise TypeError("Cannot add NaT to ndarray with dtype {dtype}"
154-
.format(dtype=other.dtype))
153+
raise TypeError(f"Cannot add NaT to ndarray with dtype {other.dtype}")
155154

156155
return NotImplemented
157156

@@ -203,9 +202,8 @@ cdef class _NaT(datetime):
203202
result.fill("NaT")
204203
return result
205204

206-
raise TypeError(
207-
"Cannot subtract NaT from ndarray with dtype {dtype}"
208-
.format(dtype=other.dtype))
205+
raise TypeError(f"Cannot subtract NaT from ndarray with "
206+
f"dtype {other.dtype}")
209207

210208
return NotImplemented
211209

pandas/_libs/tslibs/np_datetime.pyx

+3-5
Original file line numberDiff line numberDiff line change
@@ -112,11 +112,9 @@ cdef inline check_dts_bounds(npy_datetimestruct *dts):
112112
error = True
113113

114114
if error:
115-
fmt = '%d-%.2d-%.2d %.2d:%.2d:%.2d' % (dts.year, dts.month,
116-
dts.day, dts.hour,
117-
dts.min, dts.sec)
118-
raise OutOfBoundsDatetime(
119-
'Out of bounds nanosecond timestamp: {fmt}'.format(fmt=fmt))
115+
fmt = (f'{dts.year}-{dts.month:02d}-{dts.day:02d} '
116+
f'{dts.hour:02d}:{dts.min:02d}:{dts.sec:02d}')
117+
raise OutOfBoundsDatetime(f'Out of bounds nanosecond timestamp: {fmt}')
120118

121119

122120
# ----------------------------------------------------------------------

pandas/_libs/tslibs/offsets.pyx

+8-11
Original file line numberDiff line numberDiff line change
@@ -66,16 +66,16 @@ need_suffix = ['QS', 'BQ', 'BQS', 'YS', 'AS', 'BY', 'BA', 'BYS', 'BAS']
6666

6767
for __prefix in need_suffix:
6868
for _m in MONTHS:
69-
key = '%s-%s' % (__prefix, _m)
69+
key = f'{__prefix}-{_m}'
7070
_offset_to_period_map[key] = _offset_to_period_map[__prefix]
7171

7272
for __prefix in ['A', 'Q']:
7373
for _m in MONTHS:
74-
_alias = '%s-%s' % (__prefix, _m)
74+
_alias = f'{__prefix}-{_m}'
7575
_offset_to_period_map[_alias] = _alias
7676

7777
for _d in DAYS:
78-
_offset_to_period_map['W-%s' % _d] = 'W-%s' % _d
78+
_offset_to_period_map[f'W-{_d}'] = f'W-{_d}'
7979

8080

8181
# ---------------------------------------------------------------------
@@ -432,9 +432,9 @@ class _BaseOffset:
432432

433433
n_str = ""
434434
if self.n != 1:
435-
n_str = "%s * " % self.n
435+
n_str = f"{self.n} * "
436436

437-
out = '<%s' % n_str + className + plural + self._repr_attrs() + '>'
437+
out = f'<{n_str}{className}{plural}{self._repr_attrs()}>'
438438
return out
439439

440440
def _get_offset_day(self, datetime other):
@@ -460,16 +460,13 @@ class _BaseOffset:
460460
ValueError if n != int(n)
461461
"""
462462
if util.is_timedelta64_object(n):
463-
raise TypeError('`n` argument must be an integer, '
464-
'got {ntype}'.format(ntype=type(n)))
463+
raise TypeError(f'`n` argument must be an integer, got {type(n)}')
465464
try:
466465
nint = int(n)
467466
except (ValueError, TypeError):
468-
raise TypeError('`n` argument must be an integer, '
469-
'got {ntype}'.format(ntype=type(n)))
467+
raise TypeError(f'`n` argument must be an integer, got {type(n)}')
470468
if n != nint:
471-
raise ValueError('`n` argument must be an integer, '
472-
'got {n}'.format(n=n))
469+
raise ValueError(f'`n` argument must be an integer, got {n}')
473470
return nint
474471

475472
def __setstate__(self, state):

pandas/_libs/tslibs/parsing.pyx

+12-14
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ cdef inline object _parse_delimited_date(object date_string, bint dayfirst):
153153
return datetime_new(year, month, day, 0, 0, 0, 0, None), reso
154154
return datetime(year, month, day, 0, 0, 0, 0, None), reso
155155

156-
raise DateParseError("Invalid date specified ({}/{})".format(month, day))
156+
raise DateParseError(f"Invalid date specified ({month}/{day})")
157157

158158

159159
cdef inline bint does_string_look_like_time(object parse_string):
@@ -311,7 +311,7 @@ cdef parse_datetime_string_with_reso(date_string, freq=None, dayfirst=False,
311311
# TODO: allow raise of errors within instead
312312
raise DateParseError(err)
313313
if parsed is None:
314-
raise DateParseError("Could not parse {dstr}".format(dstr=date_string))
314+
raise DateParseError(f"Could not parse {date_string}")
315315
return parsed, parsed, reso
316316

317317

@@ -420,18 +420,18 @@ cdef inline object _parse_dateabbr_string(object date_string, object default,
420420
raise ValueError
421421

422422
if not (1 <= quarter <= 4):
423-
msg = ('Incorrect quarterly string is given, quarter must be '
424-
'between 1 and 4: {dstr}')
425-
raise DateParseError(msg.format(dstr=date_string))
423+
raise DateParseError(f'Incorrect quarterly string is given, '
424+
f'quarter must be '
425+
f'between 1 and 4: {date_string}')
426426

427427
if freq is not None:
428428
# hack attack, #1228
429429
try:
430430
mnum = MONTH_NUMBERS[_get_rule_month(freq)] + 1
431431
except (KeyError, ValueError):
432-
msg = ('Unable to retrieve month information from given '
433-
'freq: {freq}'.format(freq=freq))
434-
raise DateParseError(msg)
432+
raise DateParseError(f'Unable to retrieve month '
433+
f'information from given '
434+
f'freq: {freq}')
435435

436436
month = (mnum + (quarter - 1) * 3) % 12 + 1
437437
if month > mnum:
@@ -464,7 +464,7 @@ cdef inline object _parse_dateabbr_string(object date_string, object default,
464464
except ValueError:
465465
pass
466466

467-
raise ValueError('Unable to parse {0}'.format(date_string))
467+
raise ValueError(f'Unable to parse {date_string}')
468468

469469

470470
cdef dateutil_parse(object timestr, object default, ignoretz=False,
@@ -484,8 +484,7 @@ cdef dateutil_parse(object timestr, object default, ignoretz=False,
484484
res, _ = res
485485

486486
if res is None:
487-
msg = "Unknown datetime string format, unable to parse: {timestr}"
488-
raise ValueError(msg.format(timestr=timestr))
487+
raise ValueError(f"Unknown datetime string format, unable to parse: {timestr}")
489488

490489
for attr in ["year", "month", "day", "hour",
491490
"minute", "second", "microsecond"]:
@@ -495,8 +494,7 @@ cdef dateutil_parse(object timestr, object default, ignoretz=False,
495494
reso = attr
496495

497496
if reso is None:
498-
msg = "Unable to parse datetime string: {timestr}"
499-
raise ValueError(msg.format(timestr=timestr))
497+
raise ValueError(f"Unable to parse datetime string: {timestr}")
500498

501499
if reso == 'microsecond':
502500
if repl['microsecond'] == 0:
@@ -710,7 +708,7 @@ class _timelex:
710708
elif getattr(instream, 'read', None) is None:
711709
raise TypeError(
712710
'Parser must be a string or character stream, not '
713-
'{itype}'.format(itype=instream.__class__.__name__))
711+
f'{type(instream).__name__}')
714712
else:
715713
self.stream = instream.read()
716714

0 commit comments

Comments
 (0)