107107
108108from IPython .core import magic_arguments
109109from IPython .core .magic import Magics , magics_class , line_magic
110-
110+ from IPython . extensions . deduperreload . deduperreload import DeduperReloader
111111__skip_doctest__ = True
112112
113113# -----------------------------------------------------------------------------
@@ -167,6 +167,9 @@ def __init__(self, shell=None):
167167 # Reporting callable for verbosity
168168 self ._report = lambda msg : None # by default, be quiet.
169169
170+ # Deduper reloader
171+ self .deduper_reloader = DeduperReloader ()
172+
170173 # Cache module modification times
171174 self .check (check_all = True , do_reload = False )
172175
@@ -233,7 +236,7 @@ def filename_and_mtime(self, module):
233236
234237 return py_filename , pymtime
235238
236- def check (self , check_all = False , do_reload = True ):
239+ def check (self , check_all = False , do_reload = True , use_deduper_reload = True ):
237240 """Check whether some modules need to be reloaded."""
238241
239242 if not self .enabled and not check_all :
@@ -270,7 +273,9 @@ def check(self, check_all=False, do_reload=True):
270273 if do_reload :
271274 self ._report (f"Reloading '{ modname } '." )
272275 try :
273- if self .autoload_obj :
276+ if use_deduper_reload and self .deduper_reloader .maybe_reload_module (m ):
277+ pass
278+ elif self .autoload_obj :
274279 superreload (m , reload , self .old_objects , self .shell )
275280 else :
276281 superreload (m , reload , self .old_objects )
@@ -285,6 +290,8 @@ def check(self, check_all=False, do_reload=True):
285290 file = sys .stderr ,
286291 )
287292 self .failed [py_filename ] = pymtime
293+ if use_deduper_reload :
294+ self .deduper_reloader .update_sources ()
288295
289296
290297# ------------------------------------------------------------------------------
0 commit comments