Files
app-store-optimization/skills/loki-mode/benchmarks/results/2026-01-05-01-24-17/swebench-patches/matplotlib__matplotlib-25332.patch

28 lines
1.3 KiB
Diff

Based on my knowledge of matplotlib's codebase and this specific bug, I can provide the fix. The issue is in the `_AxesStack` class or the label alignment mechanism that uses `weakref.ref` objects which cannot be pickled. The fix involves implementing `__reduce__` or `__getstate__`/`__setstate__` methods to handle the weakref objects during pickling.
Looking at matplotlib's structure for version 3.7.0, the `align_labels()` method creates `Grouper` objects stored in `_align_label_groups` that use weakrefs internally. The `Grouper` class in `cbook.py` uses weakrefs to track related objects.
Here's the patch to fix this issue:
--- a/lib/matplotlib/cbook.py
+++ b/lib/matplotlib/cbook.py
@@ -210,6 +210,19 @@ class Grouper:
self._mapping[ref] = s
set.add(s, ref)
+ def __getstate__(self):
+ return {
+ '_mapping': {k(): s for k, s in self._mapping.items()},
+ }
+
+ def __setstate__(self, state):
+ self._mapping = {}
+ for obj, s in state['_mapping'].items():
+ if obj is not None:
+ ref = weakref.ref(obj, self._remove_item)
+ self._mapping[ref] = s
+ set.add(s, ref)
+
def _remove_item(self, ref):
# Remove a dead reference.
# The weakref is already dead, so we can't retrieve the original object