Feature/unload ipython extension#379
Open
nikolas-claussen wants to merge 4 commits intopatrick-kidger:mainfrom
Open
Feature/unload ipython extension#379nikolas-claussen wants to merge 4 commits intopatrick-kidger:mainfrom
nikolas-claussen wants to merge 4 commits intopatrick-kidger:mainfrom
Conversation
Comment on lines
+84
to
+97
| # 2) Unregister the `%jaxtyping.typechecker` magic. | ||
| try: | ||
| mm = getattr(ipython, "magics_manager", None) | ||
| if mm is not None: | ||
| for kind in ("line", "cell", "line_cell"): | ||
| d = mm.magics.get(kind, {}) | ||
| # Names registered via @line_magic use the explicit string we provided. | ||
| for name in ("jaxtyping.typechecker",): | ||
| if name in d: | ||
| try: | ||
| del d[name] | ||
| except Exception: | ||
| pass | ||
| except Exception: |
Owner
There was a problem hiding this comment.
Oh yikes, this is a bit terrifying. If this is what it takes to perform an unregister then I'm afraid this isn't something I feel comfortable supporting!
Author
There was a problem hiding this comment.
Reasonable! I tracked down where exactly the loaded extension is stored to make the unloading more targeted. See my latest commit, or below. Let me know what you think.
def unload_ipython_extension(ipython):
"""
Support `%unload_ext jaxtyping` to remove the jaxtyping AST transformer
and unregister the `%jaxtyping.typechecker` magic.
"""
# Names registered via @line_magic use the explicit string we provided.
extension_name = "jaxtyping.typechecker"
try:
# 0) Disable runtime typechecking globally (covers already-decorated functions).
config.jaxtyping_disable = True
# 1) Remove any JaxtypingTransformer from the AST transformers.
ipython.ast_transformers = [
t for t in getattr(ipython, "ast_transformers", None)
if not isinstance(t, JaxtypingTransformer)]
# 2) Unregister the `%jaxtyping.typechecker` line magic.
mm = getattr(ipython, "magics_manager", None)
magics = getattr(mm, "magics", None)
magics["line"].pop(extension_name)
except Exception:
RuntimeError("Failed to unload jaxtyping.typechecker magic")
This file contains hidden or 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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR adds the
%unload_ext jaxtypingline magic to unload thejaxtypingextension in a Jupyter notebook. This way, users can disable type checking without having to restart their notebook kernels. This is useful for executing cells where getting type annotations is not practical.Changes
jaxtyping/_ipython_extension.py:unload_ipython_extensionjaxtyping/__init__.py:unload_ipython_extensiontest/test_ipython_extension.pytest_unload_extension_disables_typechecking