Skip to content

Commit c6a4b1c

Browse files
committed
CLN: replace %s syntax with .format in tslibs/timedeltas
1 parent 509e03c commit c6a4b1c

File tree

2 files changed

+44
-50
lines changed

2 files changed

+44
-50
lines changed

pandas/_libs/tslibs/timedeltas.pyx

+34-50
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ cpdef convert_to_timedelta64(object ts, object unit):
150150
ts = np.timedelta64(delta_to_nanoseconds(ts), 'ns')
151151
elif not is_timedelta64_object(ts):
152152
raise ValueError("Invalid type for timedelta "
153-
"scalar: %s" % type(ts))
153+
"scalar: {ts_type}".format(ts_type=type(ts)))
154154
return ts.astype('timedelta64[ns]')
155155

156156

@@ -526,7 +526,7 @@ cdef class _Timedelta(timedelta):
526526
int64_t value # nanoseconds
527527
object freq # frequency reference
528528
bint is_populated # are my components populated
529-
int64_t _sign, _d, _h, _m, _s, _ms, _us, _ns
529+
int64_t _d, _h, _m, _s, _ms, _us, _ns
530530

531531
# higher than np.ndarray and np.matrix
532532
__array_priority__ = 100
@@ -560,8 +560,8 @@ cdef class _Timedelta(timedelta):
560560
return True
561561

562562
# only allow ==, != ops
563-
raise TypeError('Cannot compare type %r with type %r' %
564-
(type(self).__name__,
563+
raise TypeError('Cannot compare type {!r} with type ' \
564+
'{!r}'.format(type(self).__name__,
565565
type(other).__name__))
566566
if util.is_array(other):
567567
return PyObject_RichCompare(np.array([self]), other, op)
@@ -571,8 +571,9 @@ cdef class _Timedelta(timedelta):
571571
return False
572572
elif op == Py_NE:
573573
return True
574-
raise TypeError('Cannot compare type %r with type %r' %
575-
(type(self).__name__, type(other).__name__))
574+
raise TypeError('Cannot compare type {!r} with type ' \
575+
'{!r}'.format(type(self).__name__,
576+
type(other).__name__))
576577

577578
return cmp_scalar(self.value, ots.value, op)
578579

@@ -591,10 +592,6 @@ cdef class _Timedelta(timedelta):
591592

592593
td64_to_tdstruct(self.value, &tds)
593594
self._d = tds.days
594-
if self._d < 0:
595-
self._sign = -1
596-
else:
597-
self._sign = 1
598595
self._h = tds.hrs
599596
self._m = tds.min
600597
self._s = tds.sec
@@ -687,53 +684,40 @@ cdef class _Timedelta(timedelta):
687684
converted : string of a Timedelta
688685
689686
"""
690-
cdef object sign_pretty, sign2_pretty, seconds_pretty, subs
687+
cdef object sign, seconds_pretty, subs, fmt, comp_dict
691688

692689
self._ensure_components()
693690

694-
if self._sign < 0:
695-
sign_pretty = "-"
696-
sign2_pretty = " +"
691+
if self._d < 0:
692+
sign = " +"
697693
else:
698-
sign_pretty = ""
699-
sign2_pretty = " "
694+
sign = " "
700695

701-
# show everything
702696
if format == 'all':
703-
seconds_pretty = "%02d.%03d%03d%03d" % (
704-
self._s, self._ms, self._us, self._ns)
705-
return "%d days%s%02d:%02d:%s" % (self._d,
706-
sign2_pretty, self._h,
707-
self._m, seconds_pretty)
708-
709-
# by default not showing nano
710-
if self._ms or self._us or self._ns:
711-
seconds_pretty = "%02d.%03d%03d" % (self._s, self._ms, self._us)
697+
fmt = "{days} days{sign}{hours:02}:{minutes:02}:{seconds:02}." \
698+
"{milliseconds:03}{microseconds:03}{nanoseconds:03}"
712699
else:
713-
seconds_pretty = "%02d" % self._s
714-
715-
# if we have a partial day
716-
subs = (self._h or self._m or self._s or
717-
self._ms or self._us or self._ns)
718-
719-
if format == 'even_day':
720-
if not subs:
721-
return "%d days" % (self._d)
722-
723-
elif format == 'sub_day':
724-
if not self._d:
725-
726-
# degenerate, don't need the extra space
727-
if self._sign > 0:
728-
sign2_pretty = ""
729-
return "%s%s%02d:%02d:%s" % (sign_pretty, sign2_pretty,
730-
self._h, self._m, seconds_pretty)
731-
732-
if subs or format=='long':
733-
return "%d days%s%02d:%02d:%s" % (self._d,
734-
sign2_pretty, self._h,
735-
self._m, seconds_pretty)
736-
return "%d days" % (self._d)
700+
# if we have a partial day
701+
subs = (self._h or self._m or self._s or
702+
self._ms or self._us or self._ns)
703+
704+
# by default not showing nano
705+
if self._ms or self._us or self._ns:
706+
seconds_fmt = "{seconds:02}.{milliseconds:03}{microseconds:03}"
707+
else:
708+
seconds_fmt = "{seconds:02}"
709+
710+
if format == 'sub_day' and not self._d:
711+
fmt = "{hours:02}:{minutes:02}:" + seconds_fmt
712+
elif subs or format == 'long':
713+
fmt = "{days} days{sign}{hours:02}:{minutes:02}:" + seconds_fmt
714+
else:
715+
fmt = "{days} days"
716+
717+
comp_dict = self.components._asdict()
718+
comp_dict['sign'] = sign
719+
720+
return fmt.format(**comp_dict)
737721

738722
def __repr__(self):
739723
return "Timedelta('{0}')".format(self._repr_base(format='long'))

pandas/tests/io/formats/test_format.py

+10
Original file line numberDiff line numberDiff line change
@@ -2281,7 +2281,9 @@ def test_none(self):
22812281
assert drepr(delta_1s) == "0 days 00:00:01"
22822282
assert drepr(delta_500ms) == "0 days 00:00:00.500000"
22832283
assert drepr(delta_1d + delta_1s) == "1 days 00:00:01"
2284+
assert drepr(-delta_1d + delta_1s) == "-1 days +00:00:01"
22842285
assert drepr(delta_1d + delta_500ms) == "1 days 00:00:00.500000"
2286+
assert drepr(-delta_1d + delta_500ms) == "-1 days +00:00:00.500000"
22852287

22862288
def test_even_day(self):
22872289
delta_1d = pd.to_timedelta(1, unit='D')
@@ -2296,7 +2298,9 @@ def test_even_day(self):
22962298
assert drepr(delta_1s) == "0 days 00:00:01"
22972299
assert drepr(delta_500ms) == "0 days 00:00:00.500000"
22982300
assert drepr(delta_1d + delta_1s) == "1 days 00:00:01"
2301+
assert drepr(-delta_1d + delta_1s) == "-1 days +00:00:01"
22992302
assert drepr(delta_1d + delta_500ms) == "1 days 00:00:00.500000"
2303+
assert drepr(-delta_1d + delta_500ms) == "-1 days +00:00:00.500000"
23002304

23012305
def test_sub_day(self):
23022306
delta_1d = pd.to_timedelta(1, unit='D')
@@ -2311,7 +2315,9 @@ def test_sub_day(self):
23112315
assert drepr(delta_1s) == "00:00:01"
23122316
assert drepr(delta_500ms) == "00:00:00.500000"
23132317
assert drepr(delta_1d + delta_1s) == "1 days 00:00:01"
2318+
assert drepr(-delta_1d + delta_1s) == "-1 days +00:00:01"
23142319
assert drepr(delta_1d + delta_500ms) == "1 days 00:00:00.500000"
2320+
assert drepr(-delta_1d + delta_500ms) == "-1 days +00:00:00.500000"
23152321

23162322
def test_long(self):
23172323
delta_1d = pd.to_timedelta(1, unit='D')
@@ -2326,7 +2332,9 @@ def test_long(self):
23262332
assert drepr(delta_1s) == "0 days 00:00:01"
23272333
assert drepr(delta_500ms) == "0 days 00:00:00.500000"
23282334
assert drepr(delta_1d + delta_1s) == "1 days 00:00:01"
2335+
assert drepr(-delta_1d + delta_1s) == "-1 days +00:00:01"
23292336
assert drepr(delta_1d + delta_500ms) == "1 days 00:00:00.500000"
2337+
assert drepr(-delta_1d + delta_500ms) == "-1 days +00:00:00.500000"
23302338

23312339
def test_all(self):
23322340
delta_1d = pd.to_timedelta(1, unit='D')
@@ -2335,8 +2343,10 @@ def test_all(self):
23352343

23362344
drepr = lambda x: x._repr_base(format='all')
23372345
assert drepr(delta_1d) == "1 days 00:00:00.000000000"
2346+
assert drepr(-delta_1d) == "-1 days +00:00:00.000000000"
23382347
assert drepr(delta_0d) == "0 days 00:00:00.000000000"
23392348
assert drepr(delta_1ns) == "0 days 00:00:00.000000001"
2349+
assert drepr(-delta_1d + delta_1ns) == "-1 days +00:00:00.000000001"
23402350

23412351

23422352
class TestTimedelta64Formatter(object):

0 commit comments

Comments
 (0)