1+ # TODO: replace object.__XXX__(self, ...) with super().__XXX__(...)
2+ # once Python 2 support is removed.
3+
14from __future__ import print_function
25
36import warnings
47import sys
58
9+ try :
10+ from importlib import reload
11+ except ImportError :
12+ try :
13+ from imp import reload
14+ except ImportError :
15+ pass # Python 2?
16+
17+ _Main = None
18+
619
720def jl_name (name ):
821 if name .endswith ('_b' ):
@@ -32,13 +45,15 @@ def __init__(self, julia):
3245
3346 def __setattr__ (self , name , value ):
3447 if name .startswith ('_' ):
35- super (JuliaNameSpace , self ).__setattr__ (name , value )
48+ object .__setattr__ (self , name , value )
49+ # super().__setattr__(name, value)
3650 else :
3751 self .__julia .set_var (name , value )
3852
3953 def __getattr__ (self , name ):
4054 if name .startswith ('_' ):
41- return super (JuliaNameSpace , self ).__getattr__ (name )
55+ return object .__getattr__ (self , name )
56+ # return super().__getattr__(name)
4257 else :
4358 return self .__julia .eval (jl_name (name ))
4459
@@ -51,7 +66,7 @@ def __dir__(self):
5166 if sys .version_info .major == 2 :
5267 names = set ()
5368 else :
54- names = set (super (JuliaNameSpace , self ).__dir__ ())
69+ names = set (super ().__dir__ ())
5570 names .update (self .__all__ )
5671 return list (names )
5772 # Override __dir__ method so that completing member names work
@@ -133,9 +148,10 @@ def wrapped(*args, **kwargs):
133148
134149
135150def ipython_options (** kwargs ):
151+ global _Main
136152 from traitlets .config import Config
137153
138- Main = JuliaNameSpace (JuliaAPI (** kwargs ))
154+ _Main = Main = JuliaNameSpace (JuliaAPI (** kwargs ))
139155 user_ns = dict (
140156 Main = Main ,
141157 )
@@ -178,3 +194,16 @@ def customized_ipython(**kwargs):
178194 warnings .warn (segfault_warning .format (** vars ()))
179195 segfault_warned = True
180196 IPython .start_ipython (** ipython_options (** kwargs ))
197+
198+
199+ def revise ():
200+ """Ad-hoc hot reload."""
201+ import replhelper
202+ reload (replhelper .core )
203+
204+ if _Main is not None :
205+ _Main .__class__ = replhelper .core .JuliaNameSpace
206+ _Main ._JuliaNameSpace__julia .__class__ = replhelper .core .JuliaAPI
207+ replhelper .core ._Main = _Main
208+
209+ reload (replhelper )
0 commit comments