def brain_gc(request): """Ensure that brain can be properly garbage collected.""" keys = ( 'renderer_interactive', 'renderer_interactive_pyvistaqt', 'renderer_interactive_pysurfer', 'renderer', 'renderer_pyvistaqt', 'renderer_notebook', ) assert set(request.fixturenames) & set(keys) != set() for key in keys: if key in request.fixturenames: is_pv = \ request.getfixturevalue(key)._get_3d_backend() == 'pyvistaqt' close_func = request.getfixturevalue(key).backend._close_all break if not is_pv: yield return import pyvista if LooseVersion(pyvista.__version__) <= LooseVersion('0.26.1'): yield return from mne.viz import Brain ignore = set(id(o) for o in gc.get_objects()) yield close_func() # no need to warn if the test itself failed, pytest-harvest helps us here try: outcome = request.node.harvest_rep_call except Exception: outcome = 'failed' if outcome != 'passed': return _assert_no_instances(Brain, 'after') # We only check VTK for PyVista -- Mayavi/PySurfer is not as strict objs = gc.get_objects() bad = list() for o in objs: try: name = o.__class__.__name__ except Exception: # old Python, probably pass else: if name.startswith('vtk') and id(o) not in ignore: bad.append(name) del o del objs, ignore, Brain assert len(bad) == 0, 'VTK objects linger:\n' + '\n'.join(bad)
def __call__(self, gallery_conf, fname): import matplotlib.pyplot as plt try: from pyvista import Plotter except ImportError: Plotter = None reset_warnings(gallery_conf, fname) # in case users have interactive mode turned on in matplotlibrc, # turn it off here (otherwise the build can be very slow) plt.ioff() plt.rcParams['animation.embed_limit'] = 30. _assert_no_instances(Brain, 'running') # calls gc.collect() if Plotter is not None: _assert_no_instances(Plotter, 'running') # This will overwrite some Sphinx printing but it's useful # for memory timestamps if os.getenv('SG_STAMP_STARTS', '').lower() == 'true': import psutil process = psutil.Process(os.getpid()) mem = sizeof_fmt(process.memory_info().rss) print(f'{time.time() - self.t0:6.1f} s : {mem}'.ljust(22))