Skip to content

Commit

Permalink
Backport PR STYLE enable pylint: method-cache-max-size-none (#49784)
Browse files Browse the repository at this point in the history
Co-authored-by: Natalia Mokeeva <91160475+natmokval@users.noreply.github.com>
  • Loading branch information
MarcoGorelli and natmokval committed Nov 19, 2022
1 parent 8c4b559 commit 9196f8d
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 7 deletions.
2 changes: 1 addition & 1 deletion doc/source/whatsnew/v1.5.2.rst
Expand Up @@ -28,7 +28,7 @@ Fixed regressions
Bug fixes
~~~~~~~~~
- Bug in the Copy-on-Write implementation losing track of views in certain chained indexing cases (:issue:`48996`)
-
- Fixed memory leak in :meth:`.Styler.to_excel` (:issue:`49751`)

.. ---------------------------------------------------------------------------
.. _whatsnew_152.other:
Expand Down
10 changes: 9 additions & 1 deletion pandas/io/formats/excel.py
Expand Up @@ -170,10 +170,13 @@ def __init__(self, inherited: str | None = None) -> None:
self.inherited = self.compute_css(inherited)
else:
self.inherited = None
# We should avoid lru_cache on the __call__ method.
# Otherwise once the method __call__ has been called
# garbage collection no longer deletes the instance.
self._call_cached = lru_cache(maxsize=None)(self._call_uncached)

compute_css = CSSResolver()

@lru_cache(maxsize=None)
def __call__(
self, declarations: str | frozenset[tuple[str, str]]
) -> dict[str, dict[str, str]]:
Expand All @@ -193,6 +196,11 @@ def __call__(
A style as interpreted by ExcelWriter when found in
ExcelCell.style.
"""
return self._call_cached(declarations)

def _call_uncached(
self, declarations: str | frozenset[tuple[str, str]]
) -> dict[str, dict[str, str]]:
properties = self.compute_css(declarations, self.inherited)
return self.build_xlstyle(properties)

Expand Down
10 changes: 5 additions & 5 deletions pandas/tests/io/formats/test_to_excel.py
Expand Up @@ -357,7 +357,7 @@ def test_css_excel_cell_precedence(styles, expected):
"""It applies favors latter declarations over former declarations"""
# See GH 47371
converter = CSSToExcelConverter()
converter.__call__.cache_clear()
converter._call_cached.cache_clear()
css_styles = {(0, 0): styles}
cell = CssExcelCell(
row=0,
Expand All @@ -369,7 +369,7 @@ def test_css_excel_cell_precedence(styles, expected):
css_col=0,
css_converter=converter,
)
converter.__call__.cache_clear()
converter._call_cached.cache_clear()

assert cell.style == converter(expected)

Expand Down Expand Up @@ -410,7 +410,7 @@ def test_css_excel_cell_cache(styles, cache_hits, cache_misses):
"""It caches unique cell styles"""
# See GH 47371
converter = CSSToExcelConverter()
converter.__call__.cache_clear()
converter._call_cached.cache_clear()

css_styles = {(0, i): _style for i, _style in enumerate(styles)}
for css_row, css_col in css_styles:
Expand All @@ -424,8 +424,8 @@ def test_css_excel_cell_cache(styles, cache_hits, cache_misses):
css_col=css_col,
css_converter=converter,
)
cache_info = converter.__call__.cache_info()
converter.__call__.cache_clear()
cache_info = converter._call_cached.cache_info()
converter._call_cached.cache_clear()

assert cache_info.hits == cache_hits
assert cache_info.misses == cache_misses

0 comments on commit 9196f8d

Please sign in to comment.