Progress bar cause error when use juputer notebook in vscode/pycharm

Nengo simulator can cause error when run jupyter notebook in vscode/pycharm.

As long as you run the simulator using jupyter notebook in either vscode or jupyter:

model = nengo.Network()
with model:
    ens_1d = nengo.Ensemble(15, dimensions=1)
with nengo.Simulator(model) as sim:
    eval_points, activities = tuning_curves(ens_1d, sim)

I get following output from vscode/pycharm:

The error message will overwrite the cell, and even cannot be cleared. Interestingly, in browser, it is ok. It looks like this the error is related with frontend language or framework. Then I found it is the progress bar caused this problem. I tested with different progress bar, only no progress bar or terminal progress bar can avoid this problem. AutoProgressBar, IPython5ProgressBar, VdomOrHtmlProgressBar, HtmlProgressBar, VdomProgressBar all can cause this error.

Maybe it is better to use terminal progress bar by default? This requires minimal dependency and should work on all platforms.

I tested with a fresh anaconda environment, problem reamins, here is the env speficication:
name: nengo

  • defaults
  • _libgcc_mutex=0.1=main
  • attrs=19.3.0=py_0
  • backcall=0.1.0=py36_0
  • blas=1.0=mkl
  • bleach=3.1.0=py36_0
  • ca-certificates=2020.1.1=0
  • certifi=2019.11.28=py36_1
  • cycler=0.10.0=py36_0
  • dbus=1.13.12=h746ee38_0
  • decorator=4.4.2=py_0
  • defusedxml=0.6.0=py_0
  • entrypoints=0.3=py36_0
  • expat=2.2.6=he6710b0_0
  • fontconfig=2.13.0=h9420a91_0
  • freetype=2.9.1=h8a8886c_1
  • glib=2.63.1=h5a9c865_0
  • gmp=6.1.2=h6c8ec71_1
  • gst-plugins-base=1.14.0=hbbd80ab_1
  • gstreamer=1.14.0=hb453b48_1
  • icu=58.2=h9c2bf20_1
  • importlib_metadata=1.5.0=py36_0
  • intel-openmp=2020.0=166
  • ipykernel=5.1.4=py36h39e3cac_0
  • ipython=7.13.0=py36h5ca1d4c_0
  • ipython_genutils=0.2.0=py36_0
  • jedi=0.16.0=py36_1
  • jinja2=2.11.1=py_0
  • jpeg=9b=h024ee3a_2
  • jsonschema=3.2.0=py36_0
  • jupyter_client=6.1.2=py_0
  • jupyter_core=4.6.3=py36_0
  • kiwisolver=1.1.0=py36he6710b0_0
  • ld_impl_linux-64=2.33.1=h53a641e_7
  • libedit=3.1.20181209=hc058e9b_0
  • libffi=3.2.1=hd88cf55_4
  • libgcc-ng=9.1.0=hdf63c60_0
  • libgfortran-ng=7.3.0=hdf63c60_0
  • libpng=1.6.37=hbc83047_0
  • libsodium=1.0.16=h1bed415_0
  • libstdcxx-ng=9.1.0=hdf63c60_0
  • libuuid=1.0.3=h1bed415_2
  • libxcb=1.13=h1bed415_1
  • libxml2=2.9.9=hea5a465_1
  • markupsafe=1.1.1=py36h7b6447c_0
  • matplotlib=3.1.3=py36_0
  • matplotlib-base=3.1.3=py36hef1b27d_0
  • mistune=0.8.4=py36h7b6447c_0
  • mkl=2020.0=166
  • mkl-service=2.3.0=py36he904b0f_0
  • mkl_fft=1.0.15=py36ha843d7b_0
  • mkl_random=1.1.0=py36hd6b4f25_0
  • nbconvert=5.6.1=py36_0
  • nbformat=5.0.4=py_0
  • ncurses=6.2=he6710b0_0
  • notebook=6.0.3=py36_0
  • numpy-base=1.18.1=py36hde5b4d6_1
  • openssl=1.1.1f=h7b6447c_0
  • pandoc=
  • pandocfilters=1.4.2=py36_1
  • parso=0.6.2=py_0
  • pcre=8.43=he6710b0_0
  • pexpect=4.8.0=py36_0
  • pickleshare=0.7.5=py36_0
  • pip=20.0.2=py36_1
  • prometheus_client=0.7.1=py_0
  • prompt-toolkit=3.0.4=py_0
  • prompt_toolkit=3.0.4=0
  • ptyprocess=0.6.0=py36_0
  • pygments=2.6.1=py_0
  • pyparsing=2.4.6=py_0
  • pyqt=5.9.2=py36h05f1152_2
  • pyrsistent=0.16.0=py36h7b6447c_0
  • python=3.6.10=hcf32534_1
  • python-dateutil=2.8.1=py_0
  • pyzmq=18.1.1=py36he6710b0_0
  • qt=5.9.7=h5867ecd_1
  • readline=8.0=h7b6447c_0
  • send2trash=1.5.0=py36_0
  • setuptools=46.1.3=py36_0
  • sip=4.19.8=py36hf484d3e_0
  • six=1.14.0=py36_0
  • sqlite=3.31.1=h7b6447c_0
  • terminado=0.8.3=py36_0
  • testpath=0.4.4=py_0
  • tk=8.6.8=hbc83047_0
  • tornado=6.0.4=py36h7b6447c_1
  • traitlets=4.3.3=py36_0
  • wcwidth=0.1.9=py_0
  • webencodings=0.5.1=py36_1
  • wheel=0.34.2=py36_0
  • xz=5.2.4=h14c3975_4
  • zeromq=4.3.1=he6710b0_3
  • zipp=2.2.0=py_0
  • zlib=1.2.11=h7b6447c_3
  • pip:
    • nengo==3.0.0
    • numpy==1.18.2

The terminal progress bar can lead to a large memory usage in Jupyter notebooks. At least that was the case a few years ago, not sure if it is fixed now (or even considered a bug).

It is a bit surprising to me that you get the same error with both HtmlProgressBar and VdomProgressBar. Makes me wonder if IPython widgets work at all in VS Code. Maybe you can try the following code?

from ipywidgets import interact
def f(x):
    return x
interact(f, x=10);

That should give you a slider (that doesn’t do much except for creating a widget).

I’m not a user of VS Code, but my understanding is that it requires plugins for specific languages features? Could you provide a list of those plugins that you are using? You also mentioned PyCharm, do you get the exactly same error with that IDE? But if you launch an independent Jupyter Notebook instance it is fine?