Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

weakref to enable gc + setting children with iterable + fix loading state via jupyter.widget.control + fix various tooltips #3893

Closed
wants to merge 36 commits into from

Conversation

fleming79
Copy link

@fleming79 fleming79 commented Mar 10, 2024

This PR consists of several enhancements/fixes:

No breaking changes are foreseen.

Garbage collection

A weak reference is used for the comm message removing internal strong references.

A new function enable_weakreference replaces the global _instances dict with a weak value dictionary moving any existing mappings. This removes the last strong reference to objects in the ipywidgets module enabling automatic garbage collection once the user generated strong references are removed.

The inverse function disable_weakreference does the opposite, restoring a normal dictionary and copying existing mappings.

Box.children

Box.children has new features:

  • Can be set with any iterable
  • All invalid items and closed widgets are identified. The behavior on detection of invalid items is configurable to either:
    • Raise an error (default behavior), or
    • log an error and omit invalid widgets.

Other changes

  • Representation of a closed widget is changed to f'<closed:{self.__class__.__name__}>'
  • Auto loading of comms is improved

Copy link

Binder 👈 Launch a binder notebook on branch fleming79/ipywidgets/main

Alan Fleming and others added 25 commits March 10, 2024 20:00
…dentify closed widgets.

Added a new class `Children` for the children trait of Box optimised for checking widgets
and quietly dropping widgets that are closed, and objects that aren't widgets. Widgets in Box.children
 are also removed when the widget is closed.
 Added tests test_gc_box & test_gc_box_advanced
…pr_mimebundle_ is set to None when closed, this reduces the risk of name clash with subclasses.

Changed Children to allow any object that has the method `_repr_mimebundle_`.
Moved box related tests to test_widget_box.
Added `close` method to Box to ensure discarded children are un-observed.
…rgument `observe_children`.

Updated TestBox.
- change evaluation order to check for a widget first (most common object).
- raise NotImplementedError for objects with _repr_mimebundle_ that aren't widgets.
Fix 'Exception' for a Box that has been provided a tooltip.
@fleming79 fleming79 marked this pull request as draft May 5, 2024 12:28
Alan Fleming added 2 commits May 6, 2024 08:57
Removed _model_id and revised __rer__ for a closed widget.
Added validate_mode for Box.
@fleming79 fleming79 changed the title Use weakref to resolve kernel side memory leaks weakref to enable gc + setting children with iterable + fix loading state via jupyter.widget.control + fix various tooltips May 10, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

1 participant