Opened 4 years ago

Closed 3 years ago

Last modified 3 years ago

#6363 closed defect (fixed)

Qt6 shell tab-completion crash

Reported by: Tristan Croll Owned by: Zach Pearson
Priority: normal Milestone: 1.4
Component: Window Toolkit Version:
Keywords: Cc: chimerax-programmers, Tony Schaefer
Blocked By: Blocking:
Notify when closed: Platform: all
Project: ChimeraX

Description

The following bug report has been submitted:
Platform:        Windows-10-10.0.19041
ChimeraX Version: 1.4.dev202203110419 (2022-03-11 04:19:32 UTC)
Description
Last time you used ChimeraX it crashed.
Please describe steps that led to the crash here.
Trying to tab-complete any import in the shell causes a crash.

Windows fatal exception: access violation

Thread 0x00004e44 (most recent call first):
  File "C:\Program Files\ChimeraX-daily\bin\lib\selectors.py", line 315 in _select
  File "C:\Program Files\ChimeraX-daily\bin\lib\selectors.py", line 324 in select
  File "C:\Program Files\ChimeraX-daily\bin\lib\asyncio\base_events.py", line 1854 in _run_once
  File "C:\Program Files\ChimeraX-daily\bin\lib\asyncio\base_events.py", line 596 in run_forever
  File "C:\Program Files\ChimeraX-daily\bin\lib\site-packages\tornado\platform\asyncio.py", line 199 in start
  File "C:\Program Files\ChimeraX-daily\bin\lib\site-packages\ipykernel\iostream.py", line 81 in _thread_main
  File "C:\Program Files\ChimeraX-daily\bin\lib\threading.py", line 910 in run
  File "C:\Program Files\ChimeraX-daily\bin\lib\threading.py", line 973 in _bootstrap_inner
  File "C:\Program Files\ChimeraX-daily\bin\lib\threading.py", line 930 in _bootstrap

Thread 0x0000a8d0 (most recent call first):
  File "C:\Program Files\ChimeraX-daily\bin\lib\threading.py", line 312 in wait
  File "C:\Program Files\ChimeraX-daily\bin\lib\threading.py", line 574 in wait
  File "C:\Program Files\ChimeraX-daily\bin\lib\site-packages\IPython\core\history.py", line 829 in run
  File "C:\Program Files\ChimeraX-daily\bin\lib\site-packages\IPython\core\history.py", line 58 in needs_sqlite
  File "C:\Program Files\ChimeraX-daily\bin\lib\site-packages\decorator.py", line 232 in fun
  File "C:\Program Files\ChimeraX-daily\bin\lib\threading.py", line 973 in _bootstrap_inner
  File "C:\Program Files\ChimeraX-daily\bin\lib\threading.py", line 930 in _bootstrap

Current thread 0x00007cac (most recent call first):
  File "C:\Program Files\ChimeraX-daily\bin\lib\site-packages\qtconsole\console_widget.py", line 1696 in _get_block_plain_text
  File "C:\Program Files\ChimeraX-daily\bin\lib\site-packages\qtconsole\frontend_widget.py", line 70 in highlightBlock
  File "C:\Program Files\ChimeraX-daily\bin\lib\site-packages\qtconsole\console_widget.py", line 1089 in _fill_temporary_buffer
  File "C:\Program Files\ChimeraX-daily\bin\lib\site-packages\qtconsole\completion_html.py", line 350 in _update_list
  File "C:\Program Files\ChimeraX-daily\bin\lib\site-packages\qtconsole\completion_html.py", line 323 in show_items
  File "C:\Program Files\ChimeraX-daily\bin\lib\site-packages\qtconsole\console_widget.py", line 1078 in _complete_with_items
  File "C:\Program Files\ChimeraX-daily\bin\lib\site-packages\qtconsole\jupyter_widget.py", line 179 in _handle_complete_reply
  File "C:\Program Files\ChimeraX-daily\bin\lib\site-packages\qtconsole\base_frontend_mixin.py", line 138 in _dispatch
  File "C:\Program Files\ChimeraX-daily\bin\lib\site-packages\qtconsole\inprocess.py", line 46 in call_handlers
  File "C:\Program Files\ChimeraX-daily\bin\lib\site-packages\qtconsole\inprocess.py", line 42 in 
  File "C:\Program Files\ChimeraX-daily\bin\lib\site-packages\chimerax\ui\gui.py", line 318 in event_loop
  File "C:\Program Files\ChimeraX-daily\bin\lib\site-packages\ChimeraX_main.py", line 867 in init
  File "C:\Program Files\ChimeraX-daily\bin\lib\site-packages\ChimeraX_main.py", line 1018 in 
  File "C:\Program Files\ChimeraX-daily\bin\lib\runpy.py", line 87 in _run_code
  File "C:\Program Files\ChimeraX-daily\bin\lib\runpy.py", line 197 in _run_module_as_main
===== Log before crash start =====
> isolde shorthand
    
    
    Initialising ISOLDE-specific command aliases:
    Alias	Equivalent full command
    -------------------------------------------------
    st	isolde step {arguments}
    aw	isolde add water {arguments}
    awsf	isolde add water {arguments} sim false
    al	isolde add ligand {arguments}
    aa	isolde add aa $1 sel {arguments}
    ht	isolde mod his sel {arguments}
    so	setattr sel atoms occupancy {arguments}
    ab	isolde adjust bfactors {arguments}
    ss	isolde sim start sel
    rt	isolde release torsions sel {arguments}
    rd	isolde release distances sel {arguments}
    ra	rd; rt
    pf	isolde pepflip sel
    cf	isolde cisflip sel
    cbb	color bfactor {arguments}
    cbo	color byattr occupancy {arguments}
    cbc	color {arguments} bychain; color {arguments} byhet
    cs	clipper set contourSensitivity {arguments}
    

  
UCSF ChimeraX version: 1.4.dev202203110419 (2022-03-11)  
© 2016-2022 Regents of the University of California. All rights reserved.  
How to cite UCSF ChimeraX  

> ui tool show Shell


===== Log before crash end =====

Log:
> isolde shorthand
    
    
    Initialising ISOLDE-specific command aliases:
    Alias	Equivalent full command
    -------------------------------------------------
    st	isolde step {arguments}
    aw	isolde add water {arguments}
    awsf	isolde add water {arguments} sim false
    al	isolde add ligand {arguments}
    aa	isolde add aa $1 sel {arguments}
    ht	isolde mod his sel {arguments}
    so	setattr sel atoms occupancy {arguments}
    ab	isolde adjust bfactors {arguments}
    ss	isolde sim start sel
    rt	isolde release torsions sel {arguments}
    rd	isolde release distances sel {arguments}
    ra	rd; rt
    pf	isolde pepflip sel
    cf	isolde cisflip sel
    cbb	color bfactor {arguments}
    cbo	color byattr occupancy {arguments}
    cbc	color {arguments} bychain; color {arguments} byhet
    cs	clipper set contourSensitivity {arguments}
    

  
UCSF ChimeraX version: 1.4.dev202203110419 (2022-03-11)  
© 2016-2022 Regents of the University of California. All rights reserved.  
How to cite UCSF ChimeraX  




OpenGL version: 3.3.0 NVIDIA 497.29
OpenGL renderer: NVIDIA GeForce RTX 2080/PCIe/SSE2
OpenGL vendor: NVIDIA Corporation

Locale: en_GB.cp1252
Qt version: PyQt6 6.2.3, Qt 6.2.3
Qt platform: windows

Manufacturer: Notebook                        
Model: P7xxTM1
OS: Microsoft Windows 10 Education (Build 19041)
Memory: 68,654,501,888
MaxProcessMemory: 137,438,953,344
CPU: 16 Intel(R) Core(TM) i9-9900K CPU @ 3.60GHz
OSLanguage: en-GB

Installed Packages:
    -himerax-isolde: 1.4.dev0
    alabaster: 0.7.12
    appdirs: 1.4.4
    Babel: 2.9.1
    backcall: 0.2.0
    blockdiag: 3.0.0
    certifi: 2021.10.8
    cftime: 1.6.0
    charset-normalizer: 2.0.12
    ChimeraX-AddCharge: 1.2.3
    ChimeraX-AddH: 2.1.11
    ChimeraX-AlignmentAlgorithms: 2.0
    ChimeraX-AlignmentHdrs: 3.2.1
    ChimeraX-AlignmentMatrices: 2.0
    ChimeraX-Alignments: 2.2.3
    ChimeraX-AlphaFold: 1.0
    ChimeraX-AltlocExplorer: 1.0.1
    ChimeraX-AmberInfo: 1.0
    ChimeraX-Arrays: 1.0
    ChimeraX-Atomic: 1.36.2
    ChimeraX-AtomicLibrary: 6.1.1
    ChimeraX-AtomSearch: 2.0.1
    ChimeraX-AxesPlanes: 2.1
    ChimeraX-BasicActions: 1.1
    ChimeraX-BILD: 1.0
    ChimeraX-BlastProtein: 2.0
    ChimeraX-BondRot: 2.0
    ChimeraX-BugReporter: 1.0
    ChimeraX-BuildStructure: 2.6.1
    ChimeraX-Bumps: 1.0
    ChimeraX-BundleBuilder: 1.1
    ChimeraX-ButtonPanel: 1.0
    ChimeraX-CageBuilder: 1.0
    ChimeraX-CellPack: 1.0
    ChimeraX-Centroids: 1.2
    ChimeraX-ChemGroup: 2.0
    ChimeraX-Clashes: 2.2.2
    ChimeraX-Clipper: 0.18.0
    ChimeraX-ColorActions: 1.0
    ChimeraX-ColorGlobe: 1.0
    ChimeraX-ColorKey: 1.5.1
    ChimeraX-CommandLine: 1.2.1
    ChimeraX-ConnectStructure: 2.0.1
    ChimeraX-Contacts: 1.0
    ChimeraX-Core: 1.4.dev202203110419
    ChimeraX-CoreFormats: 1.1
    ChimeraX-coulombic: 1.3.2
    ChimeraX-Crosslinks: 1.0
    ChimeraX-Crystal: 1.0
    ChimeraX-CrystalContacts: 1.0
    ChimeraX-DataFormats: 1.2.2
    ChimeraX-Dicom: 1.0
    ChimeraX-DistMonitor: 1.1.5
    ChimeraX-Dssp: 2.0
    ChimeraX-EMDB-SFF: 1.0
    ChimeraX-ExperimentalCommands: 1.0
    ChimeraX-FileHistory: 1.0
    ChimeraX-FunctionKey: 1.0
    ChimeraX-Geometry: 1.1
    ChimeraX-gltf: 1.0
    ChimeraX-Graphics: 1.1
    ChimeraX-Hbonds: 2.1.2
    ChimeraX-Help: 1.2
    ChimeraX-HKCage: 1.3
    ChimeraX-IHM: 1.1
    ChimeraX-ImageFormats: 1.2
    ChimeraX-IMOD: 1.0
    ChimeraX-IO: 1.0.1
    ChimeraX-ISOLDE: 1.4.dev0
    ChimeraX-ItemsInspection: 1.0
    ChimeraX-Label: 1.1
    ChimeraX-ListInfo: 1.1.1
    ChimeraX-Log: 1.1.5
    ChimeraX-LookingGlass: 1.1
    ChimeraX-Maestro: 1.8.1
    ChimeraX-Map: 1.1
    ChimeraX-MapData: 2.0
    ChimeraX-MapEraser: 1.0
    ChimeraX-MapFilter: 2.0
    ChimeraX-MapFit: 2.0
    ChimeraX-MapSeries: 2.1
    ChimeraX-Markers: 1.0
    ChimeraX-Mask: 1.0
    ChimeraX-MatchMaker: 2.0.6
    ChimeraX-MDcrds: 2.6
    ChimeraX-MedicalToolbar: 1.0.1
    ChimeraX-Meeting: 1.0
    ChimeraX-MLP: 1.1
    ChimeraX-mmCIF: 2.7
    ChimeraX-MMTF: 2.1
    ChimeraX-Modeller: 1.5.3
    ChimeraX-ModelPanel: 1.3.2
    ChimeraX-ModelSeries: 1.0
    ChimeraX-Mol2: 2.0
    ChimeraX-Morph: 1.0
    ChimeraX-MouseModes: 1.1
    ChimeraX-Movie: 1.0
    ChimeraX-Neuron: 1.0
    ChimeraX-Nucleotides: 2.0.2
    ChimeraX-OpenCommand: 1.8
    ChimeraX-PDB: 2.6.6
    ChimeraX-PDBBio: 1.0
    ChimeraX-PDBLibrary: 1.0.2
    ChimeraX-PDBMatrices: 1.0
    ChimeraX-PickBlobs: 1.0
    ChimeraX-Positions: 1.0
    ChimeraX-PresetMgr: 1.1
    ChimeraX-PubChem: 2.1
    ChimeraX-ReadPbonds: 1.0.1
    ChimeraX-Registration: 1.1
    ChimeraX-RemoteControl: 1.0
    ChimeraX-ResidueFit: 1.0
    ChimeraX-RestServer: 1.1
    ChimeraX-RNALayout: 1.0
    ChimeraX-RotamerLibMgr: 2.0.1
    ChimeraX-RotamerLibsDunbrack: 2.0
    ChimeraX-RotamerLibsDynameomics: 2.0
    ChimeraX-RotamerLibsRichardson: 2.0
    ChimeraX-SaveCommand: 1.5
    ChimeraX-SchemeMgr: 1.0
    ChimeraX-SDF: 2.0
    ChimeraX-Segger: 1.0
    ChimeraX-Segment: 1.0
    ChimeraX-SelInspector: 1.0
    ChimeraX-SeqView: 2.4.8
    ChimeraX-Shape: 1.0.1
    ChimeraX-Shell: 1.0
    ChimeraX-Shortcuts: 1.1
    ChimeraX-ShowAttr: 1.0
    ChimeraX-ShowSequences: 1.0
    ChimeraX-SideView: 1.0
    ChimeraX-Smiles: 2.1
    ChimeraX-SmoothLines: 1.0
    ChimeraX-SpaceNavigator: 1.0
    ChimeraX-StdCommands: 1.8
    ChimeraX-STL: 1.0
    ChimeraX-Storm: 1.0
    ChimeraX-StructMeasure: 1.0.1
    ChimeraX-Struts: 1.0.1
    ChimeraX-Surface: 1.0
    ChimeraX-SwapAA: 2.0
    ChimeraX-SwapRes: 2.1.1
    ChimeraX-TapeMeasure: 1.0
    ChimeraX-Test: 1.0
    ChimeraX-Toolbar: 1.1
    ChimeraX-ToolshedUtils: 1.2.1
    ChimeraX-Tug: 1.0
    ChimeraX-UI: 1.16.2
    ChimeraX-uniprot: 2.2
    ChimeraX-UnitCell: 1.0
    ChimeraX-ViewDockX: 1.1.2
    ChimeraX-VIPERdb: 1.0
    ChimeraX-Vive: 1.1
    ChimeraX-VolumeMenu: 1.0
    ChimeraX-VTK: 1.0
    ChimeraX-WavefrontOBJ: 1.0
    ChimeraX-WebCam: 1.0
    ChimeraX-WebServices: 1.0
    ChimeraX-Zone: 1.0
    colorama: 0.4.4
    comtypes: 1.1.10
    cxservices: 1.1
    cycler: 0.11.0
    Cython: 0.29.26
    debugpy: 1.5.1
    decorator: 5.1.1
    docutils: 0.17.1
    entrypoints: 0.4
    filelock: 3.4.2
    fonttools: 4.30.0
    funcparserlib: 1.0.0a0
    grako: 3.16.5
    h5py: 3.6.0
    html2text: 2020.1.16
    idna: 3.3
    ihm: 0.26
    imagecodecs: 2021.11.20
    imagesize: 1.3.0
    ipykernel: 6.6.1
    ipython: 7.31.1
    ipython-genutils: 0.2.0
    jedi: 0.18.1
    Jinja2: 3.0.3
    jupyter-client: 7.1.0
    jupyter-core: 4.9.2
    kiwisolver: 1.3.2
    line-profiler: 3.4.0
    lxml: 4.7.1
    lz4: 3.1.10
    MarkupSafe: 2.1.0
    matplotlib: 3.5.1
    matplotlib-inline: 0.1.3
    msgpack: 1.0.3
    nest-asyncio: 1.5.4
    netCDF4: 1.5.8
    networkx: 2.6.3
    numexpr: 2.8.1
    numpy: 1.22.1
    openvr: 1.16.802
    packaging: 21.3
    ParmEd: 3.4.3
    parso: 0.8.3
    pickleshare: 0.7.5
    Pillow: 9.0.0
    pip: 21.3.1
    pkginfo: 1.8.2
    prompt-toolkit: 3.0.28
    psutil: 5.9.0
    pycollada: 0.7.2
    pydicom: 2.2.2
    Pygments: 2.11.2
    PyOpenGL: 3.1.5
    PyOpenGL-accelerate: 3.1.5
    pyparsing: 3.0.7
    PyQt6-commercial: 6.2.3
    PyQt6-sip: 13.2.0
    PyQt6-WebEngine-commercial: 6.2.1
    python-dateutil: 2.8.2
    pytz: 2021.3
    pywin32: 303
    pyzmq: 22.3.0
    qtconsole: 5.2.2
    QtPy: 2.0.1
    RandomWords: 0.3.0
    requests: 2.27.1
    scipy: 1.7.3
    setuptools: 59.8.0
    sfftk-rw: 0.7.1
    six: 1.16.0
    snowballstemmer: 2.2.0
    sortedcontainers: 2.4.0
    Sphinx: 4.3.2
    sphinx-autodoc-typehints: 1.15.2
    sphinxcontrib-applehelp: 1.0.2
    sphinxcontrib-blockdiag: 3.0.0
    sphinxcontrib-devhelp: 1.0.2
    sphinxcontrib-htmlhelp: 2.0.0
    sphinxcontrib-jsmath: 1.0.1
    sphinxcontrib-qthelp: 1.0.3
    sphinxcontrib-serializinghtml: 1.1.5
    suds-community: 1.0.0
    tables: 3.7.0
    tifffile: 2021.11.2
    tinyarray: 1.2.4
    tornado: 6.1
    traitlets: 5.1.1
    urllib3: 1.26.8
    wcwidth: 0.2.5
    webcolors: 1.11.1
    wheel: 0.37.1
    wheel-filename: 1.3.0
    WMI: 1.5.1

Change History (19)

comment:1 by Tristan Croll, 4 years ago

Platform: all
Project: ChimeraX

Make that trying to tab-complete *anything* in the shell causes a crash.

comment:2 by Eric Pettersen, 4 years ago

Cc: chimerax-programmers added
Component: UnassignedWindow Toolkit
Owner: set to Eric Pettersen
Status: newaccepted
Summary: ChimeraX bug report submissionQt6 shell tab-completion crash

comment:3 by Eric Pettersen, 4 years ago

Any tab completion, such as "import chim<tab>".

I am going to let the shell-related packages float to their most recent versions and see if that fixes this in tomorrow's builds.

comment:4 by Eric Pettersen, 4 years ago

Owner: changed from Eric Pettersen to Tom Goddard
Status: acceptedassigned

We are at the latest version of qtconsole, and the problem is the qtpy compatibility library they use not being Qt6 ready. Tom G. has already developed a bunch of patches for qtconsole, so reassigning to him (maybe should be Zach?) The code that produces the crash is:

cursor = QtGui.QTextCursor(block)
cursor.movePosition(QtGui.QTextCursor.StartOfBlock)

comment:5 by Tom Goddard, 4 years ago

Owner: changed from Tom Goddard to Zach Pearson

This doesn't look like a qtpy problem. We are using qtpy 2.0.1 (pulled in by qtconsole) and it supports PyQt6. We have a qtconsole_pyqt6.patch in prereqs/pips that I added to get qtconsole working with Qt 6. The current qtconsole 5.22 is from December and I don't know if it supports Qt 6 -- could try taking out our qtconsole_pyqt6.patch and seeing if it works. I see in the qtconsole github repository that they just merged in a pull request to support PyQt6 yesterday

https://github.com/jupyter/qtconsole/pull/525

So I guess that is not on PyPi. It might be worth trying the current qtconsole github source in ChimeraX to see if it fixes this tab completion crash. If it doesn't then maybe we can report a bug to qtconsole about it.

Reassigning to Zach since he is handling the Qt 5 to Qt 6 migration.

comment:6 by Eric Pettersen, 4 years ago

Cc: Tony Schaefer added

comment:7 by Zach Pearson, 4 years ago

I'm observing the same behavior when I pull the source from qtconsole's GitHub into ChimeraX's internal site-packages directory, so it may be a bug in their package.

comment:8 by Zach Pearson, 4 years ago

But perhaps I jumped the gun and neglected to bump QtPy.

comment:9 by Zach Pearson, 4 years ago

Updates to qtpy, ipython, ipykernel, qtconsole, and jupyter-client have failed to solve the problem. I suspect the issue is somewhere in Jedi. It seems to complete certain things (mi<tab> becomes min) but fail at others (min(<tab> crashes and so does import i<tab)

Last edited 4 years ago by Zach Pearson (previous) (diff)

comment:10 by Zach Pearson, 4 years ago

Launching ChimeraX is actually not necessary to reproduce the bug. I have been testing by launching jupyter-qtconsole from ChimeraX's internal Python's bin directory, which just shows the qtconsole window. Tab completions that cause the tool to crash report segfaults on the command line. It also is not related to jedi, since removing it did not solve the issue either.

in reply to:  11 ; comment:11 by goddard@…, 4 years ago

If qtconsole alone exhibits this bug it sounds like you have a simple test case and could report the bug.  Although I long ago tried to get the qtconsole developers moving on Qt 6 and they were not very interested.  So it probably will not solve our problem.  Might need to just patch qtconsole to disable tab completion if we cannot find a better fix.

comment:12 by Zach Pearson, 4 years ago

I think I'll see if I can glean additional information running it with faulthandler enabled and then report it.

comment:14 by Tom Goddard, 3 years ago

Milestone: 1.4

Crash still happens, tried "import ma<tab>" in shell on Mac M1 ChimeraX with Qt 6.3.0.

This probably should be fixed for 1.4 release. Since the qtconsole developers are unlikely to make a fix in the next few weeks, we should probably just patch or monkey patch qtconsole to disable tab completion, or at least disable the tab completion cases that are known to crash.

Last edited 3 years ago by Tom Goddard (previous) (diff)

comment:15 by Zach Pearson, 3 years ago

Since I had to debug it for us anyway I went ahead and updated my issue on GitHub with what I found. I'll make the patch and submit it (and of course integrate it into ChimeraX's build process) and let them choose to take it or do their own thing. Luckily, they're just having trouble assigning the right completion manager to GUI instances of qtconsole, so once I solved that issue completion started working again.

comment:16 by Zach Pearson, 3 years ago

Resolution: fixed
Status: assignedclosed

This commit should solve it. Instead of relying on qtconsole to detect GUI mode and set the environment accordingly we always use the Qt completion widget instead of the ncurses one.

comment:17 by Zach Pearson, 3 years ago

As you can see, I found this easier than an upstream patch. :)

in reply to:  18 ; comment:18 by goddard@…, 3 years ago

Great!  Hopefully this will help the qtconsole devels home in on the source of the problem.

comment:19 by Tristan Croll, 3 years ago

Sweet! That makes tinkering with options while setting up the new GUI so much easier.

Note: See TracTickets for help on using tickets.