forked from pyodide/pyodide
-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Patch usage of
maxdict
with functools.lru_cache
- Loading branch information
1 parent
00ae48d
commit 1b57803
Showing
2 changed files
with
82 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
80 changes: 80 additions & 0 deletions
80
packages/matplotlib-pyodide/patches/0001-Replace-maxdict-with-lru-cache.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
From 18cd638fb0b70078c0e6bedc4a98331ac7652f33 Mon Sep 17 00:00:00 2001 | ||
From: Hood Chatham <roberthoodchatham@gmail.com> | ||
Date: Tue, 22 Oct 2024 14:27:43 +0200 | ||
Subject: [PATCH 01/19] Replace maxdict with lru_cache (#52) | ||
|
||
Matplotlib removed maxdict: | ||
https://matplotlib.org/stable/api/prev_api_changes/api_changes_3.6.0.html#miscellaneous-internals | ||
--- | ||
matplotlib_pyodide/html5_canvas_backend.py | 30 +++++++++++----------- | ||
1 file changed, 15 insertions(+), 15 deletions(-) | ||
|
||
diff --git a/matplotlib_pyodide/html5_canvas_backend.py b/matplotlib_pyodide/html5_canvas_backend.py | ||
index 740e679..ac3afd5 100644 | ||
--- a/matplotlib_pyodide/html5_canvas_backend.py | ||
+++ b/matplotlib_pyodide/html5_canvas_backend.py | ||
@@ -1,6 +1,7 @@ | ||
import base64 | ||
import io | ||
import math | ||
+from functools import lru_cache | ||
|
||
import numpy as np | ||
from matplotlib import __version__, interactive | ||
@@ -10,7 +11,6 @@ from matplotlib.backend_bases import ( | ||
RendererBase, | ||
_Backend, | ||
) | ||
-from matplotlib.cbook import maxdict | ||
from matplotlib.colors import colorConverter, rgb2hex | ||
from matplotlib.font_manager import findfont | ||
from matplotlib.ft2font import LOAD_NO_HINTING, FT2Font | ||
@@ -204,8 +204,8 @@ class RendererHTMLCanvas(RendererBase): | ||
self.ctx.width = self.width | ||
self.ctx.height = self.height | ||
self.dpi = dpi | ||
- self.fontd = maxdict(50) | ||
self.mathtext_parser = MathTextParser("bitmap") | ||
+ self._get_font_helper = lru_cache(maxsize=50)(self._get_font_helper) | ||
|
||
# Keep the state of fontfaces that are loading | ||
self.fonts_loading = {} | ||
@@ -309,22 +309,22 @@ class RendererHTMLCanvas(RendererBase): | ||
pixels_proxy.destroy() | ||
pixels_buf.release() | ||
|
||
+ def _get_font_helper(self, prop): | ||
+ """Cached font lookup | ||
+ | ||
+ We wrap this in an lru-cache in the constructor. | ||
+ """ | ||
+ fname = findfont(prop) | ||
+ font = FT2Font(str(fname)) | ||
+ font_file_name = fname.rpartition("/")[-1] | ||
+ return (font, font_file_name) | ||
+ | ||
def _get_font(self, prop): | ||
- key = hash(prop) | ||
- font_value = self.fontd.get(key) | ||
- if font_value is None: | ||
- fname = findfont(prop) | ||
- font_value = self.fontd.get(fname) | ||
- if font_value is None: | ||
- font = FT2Font(str(fname)) | ||
- font_file_name = fname[fname.rfind("/") + 1 :] | ||
- font_value = font, font_file_name | ||
- self.fontd[fname] = font_value | ||
- self.fontd[key] = font_value | ||
- font, font_file_name = font_value | ||
+ result = self._get_font_helper(prop) | ||
+ font = result[0] | ||
font.clear() | ||
font.set_size(prop.get_size_in_points(), self.dpi) | ||
- return font, font_file_name | ||
+ return result | ||
|
||
def get_text_width_height_descent(self, s, prop, ismath): | ||
w: float | ||
-- | ||
2.39.5 (Apple Git-154) | ||
|