From 2dd0256af623cbe00bb59a5e6f2ff634193e9582 Mon Sep 17 00:00:00 2001 From: Pedro Fonini Date: Sat, 12 Oct 2024 22:02:43 -0300 Subject: [PATCH] Instantiate the IPython shell without a local ns --- manimlib/scene/scene.py | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/manimlib/scene/scene.py b/manimlib/scene/scene.py index 179d6e58a0..eb5e9d3568 100644 --- a/manimlib/scene/scene.py +++ b/manimlib/scene/scene.py @@ -220,14 +220,14 @@ def embed( self.save_state() self.show_animation_progress = show_animation_progress - # Create embedded IPython terminal to be configured - shell = InteractiveShellEmbed.instance() - - # Use the locals namespace of the caller + # Create embedded IPython terminal configured to have access to + # the local namespace of the caller caller_frame = inspect.currentframe().f_back - local_ns = dict(caller_frame.f_locals) + module = get_module(caller_frame.f_globals["__file__"]) + shell = InteractiveShellEmbed(user_module=module) - # Add a few custom shortcuts + # Add a few custom shortcuts to that local namespace + local_ns = dict(caller_frame.f_locals) local_ns.update( play=self.play, wait=self.wait, @@ -244,6 +244,9 @@ def embed( notouch=lambda: shell.enable_gui(None), ) + # Update the shell module with the caller's locals + shortcuts + module.__dict__.update(local_ns) + # Enables gui interactions during the embed def inputhook(context): while not context.input_is_ready(): @@ -278,13 +281,7 @@ def custom_exc(shell, etype, evalue, tb, tb_offset=None): shell.magic(f"xmode {self.embed_exception_mode}") # Launch shell - shell( - local_ns=local_ns, - # Pretend like we're embeding in the caller function, not here - stack_depth=2, - # Specify that the present module is the caller's, not here - module=get_module(caller_frame.f_globals["__file__"]) - ) + shell() # End scene when exiting an embed if close_scene_on_exit: