Skip to content

Commit 83fae7d

Browse files
committed
Use property for table components
1 parent 18bc3bf commit 83fae7d

File tree

1 file changed

+50
-29
lines changed

1 file changed

+50
-29
lines changed

pandas/io/formats/latex.py

Lines changed: 50 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -245,44 +245,51 @@ def __iter__(self):
245245
class LatexFormatterAbstract(ABC):
246246
def _compose_string(self) -> str:
247247
elements = [
248-
self._compose_env_begin(),
249-
self._compose_top_separator(),
250-
self._compose_header(),
251-
self._compose_middle_separator(),
252-
self._compose_env_body(),
253-
self._compose_bottom_separator(),
254-
self._compose_env_end(),
248+
self.env_begin,
249+
self.top_separator,
250+
self.header,
251+
self.middle_separator,
252+
self.env_body,
253+
self.bottom_separator,
254+
self.env_end,
255255
]
256256
result = "\n".join([item for item in elements if item])
257257
trailing_newline = "\n"
258258
return result + trailing_newline
259259

260+
@property
260261
@abstractmethod
261-
def _compose_env_begin(self):
262+
def env_begin(self):
262263
pass
263264

265+
@property
264266
@abstractmethod
265-
def _compose_top_separator(self):
267+
def top_separator(self):
266268
pass
267269

270+
@property
268271
@abstractmethod
269-
def _compose_header(self):
272+
def header(self):
270273
pass
271274

275+
@property
272276
@abstractmethod
273-
def _compose_middle_separator(self):
277+
def middle_separator(self):
274278
pass
275279

280+
@property
276281
@abstractmethod
277-
def _compose_env_body(self):
282+
def env_body(self):
278283
pass
279284

285+
@property
280286
@abstractmethod
281-
def _compose_bottom_separator(self):
287+
def bottom_separator(self):
282288
pass
283289

290+
@property
284291
@abstractmethod
285-
def _compose_env_end(self):
292+
def env_end(self):
286293
pass
287294

288295

@@ -386,26 +393,31 @@ def _create_row_iterator(self, over):
386393
elif over == "body":
387394
return RowBodyIterator(**kwargs)
388395

389-
def _compose_header(self):
396+
@property
397+
def header(self):
390398
iterator = self._create_row_iterator(over="header")
391399
return "\n".join(list(iterator))
392400

393-
def _compose_top_separator(self):
401+
@property
402+
def top_separator(self):
394403
return "\\toprule"
395404

396-
def _compose_middle_separator(self):
405+
@property
406+
def middle_separator(self):
397407
return "\\midrule" if self._is_separator_required() else ""
398408

399-
def _compose_env_body(self):
409+
@property
410+
def env_body(self):
400411
iterator = self._create_row_iterator(over="body")
401412
return "\n".join(list(iterator))
402413

403414
def _is_separator_required(self):
404-
return self._compose_header() and self._compose_env_body()
415+
return self.header and self.env_body
405416

406417

407418
class LatexTableFormatter(LatexFormatter):
408-
def _compose_env_begin(self):
419+
@property
420+
def env_begin(self):
409421
elements = [
410422
f"\\begin{{table}}{self.position_macro}",
411423
f"\\centering",
@@ -415,26 +427,32 @@ def _compose_env_begin(self):
415427
]
416428
return "\n".join([item for item in elements if item])
417429

418-
def _compose_bottom_separator(self):
430+
@property
431+
def bottom_separator(self):
419432
return "\\bottomrule"
420433

421-
def _compose_env_end(self):
434+
@property
435+
def env_end(self):
422436
return "\n".join(["\\end{tabular}", "\\end{table}"])
423437

424438

425439
class LatexTabularFormatter(LatexFormatter):
426-
def _compose_env_begin(self):
440+
@property
441+
def env_begin(self):
427442
return f"\\begin{{tabular}}{{{self.column_format}}}"
428443

429-
def _compose_bottom_separator(self):
444+
@property
445+
def bottom_separator(self):
430446
return "\\bottomrule"
431447

432-
def _compose_env_end(self):
448+
@property
449+
def env_end(self):
433450
return "\\end{tabular}"
434451

435452

436453
class LatexLongTableFormatter(LatexFormatter):
437-
def _compose_env_begin(self):
454+
@property
455+
def env_begin(self):
438456
first_row = (
439457
f"\\begin{{longtable}}{self.position_macro}" f"{{{self.column_format}}}"
440458
)
@@ -451,7 +469,8 @@ def _caption_and_label(self):
451469
caption_and_label += double_backslash
452470
return caption_and_label
453471

454-
def _compose_middle_separator(self):
472+
@property
473+
def middle_separator(self):
455474
iterator = self._create_row_iterator(over="header")
456475
elements = [
457476
"\\midrule",
@@ -468,8 +487,10 @@ def _compose_middle_separator(self):
468487
return "\n".join(elements)
469488
return ""
470489

471-
def _compose_bottom_separator(self):
490+
@property
491+
def bottom_separator(self):
472492
return ""
473493

474-
def _compose_env_end(self):
494+
@property
495+
def env_end(self):
475496
return "\\end{longtable}"

0 commit comments

Comments
 (0)