Opened 4 years ago

Closed 3 years ago

#4663 closed enhancement (fixed)

Make native Apple M1 CPU distribution

Reported by: Tom Goddard Owned by: Zach Pearson
Priority: moderate Milestone: 1.5
Component: Platform Version:
Keywords: Cc: pett, Tristan Croll, Tom Goddard, Greg Couch
Blocked By: 6669, 6778 Blocking:
Notify when closed: Platform: all
Project: ChimeraX

Description (last modified by Tom Goddard)

Apple is replacing Intel CPUs in all machines with ARM cpus. Already have Mac laptop and Mac Mini models with ARM (Apple M1) cpu since late 2020. Apple M1 CPU is 5 nm process vs 10 nm for latest Intel cpus so much more energy efficient, or higher performance at comparable energy.

Macs use Rosetta 2 to run Intel apps on ARM cpu machines. This seems to be working fine for ChimeraX. Native ARM ChimeraX may give higher performance. Python is reported to run up to 3 times faster on ARM cpu vs Intel emulation on Mac.

We proposed making native ARM version in Chan-Zuckerberg Science Initiative (CZI) Essential Open Source Software proposal submitted May 15, 2021 with possible funding date Sept 1, 2021.

Attachments (1)

anaconda.png (992.6 KB ) - added by goddard@… 4 years ago.
Added by email2trac

Download all attachments as: .zip

Change History (74)

comment:1 by Tom Goddard, 4 years ago

We got a Mac Mini, May 2021.

I built relocatable native ARM Python 3.8.10 from standard Python distribution. The standard Python on Mac is not relocatable so this uses Greg Neagle's relocatable-python github project (Makefile.macos in prereqs/Python) which did not work without modifying Python fetch since ARM Python uses file name with macos11 while Intel version uses macosx10.9 (with an x in the name). I just hand edited relocatable-python and ran it by hand.

ChimeraX build then fails on PyQt because there are no ARM wheels available at PyPi. Will ask if these can be added on the PyQt mailing list.

comment:2 by Tom Goddard, 4 years ago

Description: modified (diff)

comment:3 by Tom Goddard, 4 years ago

It is not clear whether Qt is working on macOS arm64 cpus. Here is the Qt ticket for this "Qt for macOS on Apple Silicon (arm64)":

https://bugreports.qt.io/browse/QTBUG-85279

This ticket is "priority 2" and the "affects" field says 5.15, 6.x but "fix version" field says 6.2. So it may be that 5.15 will not be distributed for Mac arm64.

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

comment:4 by Tom Goddard, 4 years ago

Homebrew offers Qt5 for arm64

https://formulae.brew.sh/formula/qt@5

Homebrew also claims to offer PyQt5 for arm64

https://formulae.brew.sh/formula/pyqt@5

Should test this. Maybe these are really Intel binaries that run using Rosetta 2.

comment:5 by pett, 4 years ago

Oooh, that's ugly. It's looks like you are most likely to get two separate single-architecture builds in the short term (and maybe forever), which you would have to "lipo" together yourself. No idea how PyQt would handle that. We might have to offer two separate ChimeraX Mac downloads. Ugh.

comment:6 by Tom Goddard, 4 years ago

The homebrew pyqt5 and qt5 are native arm64 builds. Can probably use those for a test.

comment:7 by Tom Goddard, 4 years ago

I made a relocatable arm64 Python 3.9.6 from the standard python distribution.

I tried homebrew arm64 PyQt5 in the homebrew python 3.9.6, imports. May be able to copy this to the ChimeraX Python. May not be relocatable. Need to try it.

Commented out prereqs builds of ambertools, openmm, PyQt, pytables. OpenMM has a native arm64 build but not going to mess with that now.

Prereqs pip app-install various packages have no arm64 wheel and cannot be built from source: imagecodecs, matplotlib, netcdf4, scipy.

mk/os.make had hardcoded x86_64 in BIN_PLATFORM used in wheel names. Changed this to arm64. Also used OSXVER = 11.3 in core wheel file name and pip install said that is not a supported platform and required 11.0. Not sure why.

h5py used by emdb_sff bundle (segmentation file reader) failed to install. Error dlopen(libhdf5.dylib): image not found. Removed emdb_sff.

Core and all bundles and main app all built. Compiler flags list both arm64 and x86_64, so maybe it is compiling both g++ -arch arm64 -arch x86_64 ....

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

comment:8 by Tom Goddard, 4 years ago

Copying homebrew site-packages/PyQt5 (and with rsync -av --copy-links) and trying to start ChimeraX shows homebrew PyQt5 does not include QtWebEngineWidgets. This is confirmed online, and homebrew does not offer QtWebEngine. So I have no arm64 build of QtWebEngine in PyQt5. ChimeraX will start in nogui mode with lots of error messages because even in nogui mode it tries to import QtWebEngineWidgets.

After commenting out various places where ChimeraX imports QtWebEngineWidgets at startup I got ChimeraX gui to come up without errors. Here are the things that needed to be commented out or disabled. The main losses are the Log panel and recent file history thumbnails.

1) scheme_mgr/manager.py -- return from SchemesManager.add_provider() which is called by toolshed/init.py
2) UI class init() in ui/gui.py imports QtWebEngineWidgets before creating QApplication. Comment that out.
3) MainWindow in ui/gui.py creates FileHistory for showing thumbnails in graphics area. Comment that out.
4) ui/widgets/init.py imports HtmlView. Comment that out.
5) Log panel uses html. Make that not autostart.

With these edits ChimeraX starts and loading PDB models, showing atoms, calculating surfaces worked.

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

comment:9 by Tom Goddard, 4 years ago

On a 2021 Mac Mini (Macmini9,1) with Apple M1 processor, macOS 11.3 and 16 Gbytes memory here are some timings of native ARM vs Intel and also of 2019 MacBook Pro (MacBookPro15,3), 32 Gbytes memory, Intel i9 8-core 2.4 GHz processor. The Mac Mini CPU uses about half the power of the Mac Book Pro. Used the ChimeraX time command for all results.

open 3j3q
ARM 5.1 seconds
Intel 6.2 seconds
MBP Intel 9.8 seconds

addh on 7n30 (150,000 atom ribosome)
ARM 19.7 seconds
Intel 29.5 seconds
MBP Intel 39.1 seconds

surface on 7n30
ARM 9.2 seconds
Intel 9.8 seconds
MBP Intel 11.3 seconds

Rendering surface 7n30 full lighting
ARM (CPU integrated graphics) 7.5 frames/sec
Intel 7.5 frames/sec
MBP Intel (AMD Vega 20 graphics) 27 frames/sec

7n30 nucleotides tube/slab shape box
ARM 6.9 seconds
Intel 12.9 seconds
MBP Intel 14.2 seconds

Map contour calculation EMDB 22657 (apoferritin 420x420x420), level .01 step 1
ARM 0.67 sec
Intel 1.09 sec
MBP Intel 1.24 sec

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

comment:10 by Tom Goddard, 4 years ago

Should time the same actions with Intel ChimeraX (same version with Python 3.9) running under Rosetta emulation to see how much a native build will speed things up. Will wait for tomorrow's Python 3.9 ChimeraX build to test this.

Added these times to previous comment.

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

comment:11 by Tom Goddard, 4 years ago

Qt has announced that Qt 6.2 will support Apple Silicon (arm64) and prerelease 6.2 versions are available now

https://www.qt.io/blog/qt-on-apple-silicon

They also say they will look at arm64 for Qt 5.15.4 commercial LTS. Others say they have built Qt 5.15 for Apple Silicon, but official support is unclear.

comment:12 by Tom Goddard, 4 years ago

Qt 6.2 is expected out in September 2021. We might want to port ChimeraX to Qt 6.2 before trying do distribute native arm64 ChimeraX.

comment:13 by Tom Goddard, 4 years ago

Here are all the problem dependencies for making a native arm64 ChimeraX

Qt 5, PyQt5, ambertools, pytables, h5py, imagecodecs, matplotlib, netcdf4, scipy

Qt will probably require Qt 6.2.

https://www.qt.io/blog/qt-on-apple-silicon
https://wiki.qt.io/Qt_6.2_Release

PyQt6 no indication of whether RiverBank will offer arm64 builds.
PySide6 seems likely to offer arm64 in Qt 6.2 but current 6.2 beta 1 on macOS does not include QtWebEngine.

https://wiki.qt.io/Qt_6.2.0_Known_Issues

Matplotlib, scipy using homebrew or miniconda.

https://solarianprogrammer.com/2021/06/15/install-python-numpy-scipy-matplotlib-macos-apple-silicon-arm64/
https://github.com/h5py/h5py/issues/1810

PyTables and h5py compiling from source and hdf5 is available for arm64.

https://github.com/PyTables/PyTables/issues/832

Ambertools compile.

http://archive.ambermd.org/202103/0133.html

Netcdf4 did not see anyone succeeding.

https://www.gitmemory.com/issue/Unidata/netcdf4-python/1091/803161135

Imagecodecs arm64 available on conda-forge but not PyPi.

https://stackoverflow.com/questions/67907014/install-imagecodecs-on-mac-big-sur

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

comment:14 by Tristan Croll, 4 years ago

Cc: Tristan Croll added

Supporting Apple Silicon will take a bit of work for me, I think. The big stumbling block will be the Intel MKL library I'm using to replace FFTW2 in Clipper - as far as I understand, the MKL is firmly tied to x86_64 architecture. So I'd have to find and integrate a replacement, which will take a fair bit of work. Not impossible, but far from trivial.

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

The macOS arm64 port is going to be a fair bit of work getting several packages ported (ambertools, pytables, matplotlib, ...) and I think we are aiming to do this within about 6 months.  We have asked for some funding to support this in a Chan-Zuckerberg Science essential software proposal and we should hear if it gets funded by the end of July.  Lack of funding may delay the work.

comment:16 by Tom Goddard, 4 years ago

Here is an update on arm64 support for ChimeraX dependencies. Formerly these were missing

Qt 5, PyQt5, ambertools, pytables, h5py, imagecodecs, matplotlib, netcdf4, scipy

Currently (Oct 18, 2021):

PyPi PyQt6 for Qt 6.2 now has a universal Mac wheel. That should also have QWebEngine support.
PySide6 does not have a PyPi arm64 wheel and I can find no discussion of arm64 support.

matplotlib 3.5.0rc1 has mac universal wheel on PyPi, made Oct 1, 2021

h5py (August 23, 2021), imagecodecs (Aug 25, 2021), netcdf4 (June 21, 2021), scipy (Aug 1, 2021) only have mac intel wheels on PyPi. pytables still does not even offer a mac intel binary wheel for python 3.9.

ambertools, I think we compile it and have not attempted it on arm64.

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

comment:17 by Tom Goddard, 4 years ago

I tried PyQt6 and PyQt6-WebEngine PyPi wheels in ChimeraX. They Log and File history and all HTML widgets were broken leaving those panels blank. It spewed 10 copies per second of the following error to the shell

[28898:259:1025/172621.011291:ERROR:network_service_instance_impl.cc(330)] Network service crashed, restarting service.

A test of QtWebEngineView in the system Python 3.8 (/usr/bin/python) with PyQt6 gave the same error. Several hours of investigation revealed the QtWebEngineProcess app that Qt uses to render html was failing to start. Console crash logs show a code signing problem

Process:               QtWebEngineProcess [28028]
Path:                  /Users/USER/Library/Python/3.8/lib/python/site-packages/PyQt6/Qt6/lib/QtWebEngineCore.framework/Helpers/QtWebEngineProcess.app/Contents/MacOS/QtWebEngineProcess
Date/Time:             2021-10-25 14:29:33.756 -0700
OS Version:            macOS 11.6 (20G165)
Exception Type:        EXC_BAD_ACCESS (Code Signature Invalid)
Exception Codes:       0x0000000000000032, 0x00000001045c0000
Exception Note:        EXC_CORPSE_NOTIFY
Termination Reason:    Namespace CODESIGNING, Code 0x2

Online info says with Apple Silicon unsigned apps cannot be run while on Intel cpus they can be run.

https://eclecticlight.co/2021/01/26/when-you-dont-have-permission-to-run-an-app-on-an-m1-mac/

And another article describes how to add an adhoc signature

https://eclecticlight.co/2019/01/17/code-signing-for-the-concerned-3-signing-an-app/

Although the codesign command failed apparently due to an obscure cache issue giving an error

goddard@Toms-Mac-mini chimerax % codesign --force --deep -s - ~/ucsf/chimerax/ChimeraX.app/Contents/lib/python3.9/site-packages/PyQt6/Qt6/lib/QtWebEngineCore.framework/Helpers/QtWebEngineProcess.app
/Users/goddard/ucsf/chimerax/ChimeraX.app/Contents/lib/python3.9/site-packages/PyQt6/Qt6/lib/QtWebEngineCore.framework/Helpers/QtWebEngineProcess.app: replacing existing signature
/Users/goddard/ucsf/chimerax/ChimeraX.app/Contents/lib/python3.9/site-packages/PyQt6/Qt6/lib/QtWebEngineCore.framework/Helpers/QtWebEngineProcess.app: the codesign_allocate helper tool cannot be found or used

and the solution for that is to copy the QtWebEngineProcess.app and sign the copy.

This whole QtWebEngine problem was discussed today on the PyQt mailing list by Damien Elmes and Phil Thompson and I could have saved a half day if I had found this discussion instead of rediscovering all the problems and solutions!

https://www.riverbankcomputing.com/pipermail/pyqt/2021-October/044322.html

comment:18 by Tom Goddard, 4 years ago

The benchmark timings on my latest ChimeraX ARM64 build (Oct 26, 2021, uses PyQt6) and macOS 11.6 seem to have improved since the ones I reported 3 months ago in comment 9. So here are new timings. For Intel emulation and MBP Intel (plugged in) used Oct 24, 2021 daily build.

time open 3j3q (best of 3 tries with close command after each)
ARM 3.8 seconds
Intel 5.6
MBP Intel 6.9

addh on 7n30 (150,000 atom ribosome)
ARM 18.0 seconds
Intel 28.7
MBP Intel 38.7

surface on 7n30 (time surface #1, fastest of 3 times)
ARM 8.9 seconds
Intel 9.6
MBP Intel 11.4

Rendering surface 7n30 full lighting (windowsize 1024 1024 non-retina or 512x512 retina); view ; light full ; gra rate 1 ; roll) most frequent rate over one minute.
ARM (CPU integrated graphics) 12.8 frames/sec
Intel 11.8
MBP Intel (AMD Vega 20 graphics) 27.3

7n30 nucleotides tube/slab shape box (time nuc #1 tube/slab)
ARM 6.7 seconds
Intel 12.6
MBP Intel 14.1

Map contour calculation EMDB 22657 apoferritin 420x420x420, (vol #1 step 1 level .01 ; view ; vol #1 step 1 level .02 ; time vol #1 level .01)
ARM 0.67 sec
Intel 1.02
MBP Intel 1.17

comment:19 by Tom Goddard, 4 years ago

I ran the same benchmarks on the new M1 Pro CPU in a MacBook Pro 16" (MacBookPro18,1) released this week (macOS 12.0.1, 16 GBytes memory). Tested this at the SF Union Square Apple store. They did not have the M1 Max CPU on display which has twice the number of graphics cores, nor did the Stonestown Apple Store have it on display.

Summarizing the timings: The M1 Pro CPU seems about the same speed as the M1, while the GPU is twice as fast.

time open 3j3q (best of 3 tries with close command after each)
ARM 4.0 seconds
Intel 6.0

addh on 7n30 (150,000 atom ribosome)
ARM 16.9 seconds
Intel 28.8

surface on 7n30 (time surface #1, fastest of 3 times)
ARM 8.0 seconds
Intel 9.5

Rendering surface 7n30 full lighting (windowsize 1024 1024 non-retina or 512x512 retina); view ; light full ; gra rate 1 ; roll) most frequent rate over one minute.
ARM (CPU integrated graphics) 25.7 frames/sec
Intel 25.0

7n30 nucleotides tube/slab shape box (time nuc #1 tube/slab)
ARM 6.6 seconds
Intel 13.0

Map contour calculation EMDB 22657 apoferritin 420x420x420, (vol #1 step 1 level .01 ; view ; vol #1 step 1 level .02 ; time vol #1 level .01)
ARM 0.67 sec
Intel 1.02

comment:20 by Tom Goddard, 4 years ago

I made a talk for the CZI Essential Open Source Software annual meeting on porting to Apple M1 CPU

https://www.rbvi.ucsf.edu/chimerax/data/czi-nov2021/apple_m1.html

comment:21 by Tom Goddard, 4 years ago

Native apps for the Apple M1 CPU must be signed in order to run. An adhoc signature can be used that has no certificate and the compiler adds this by default, apparently inside the executable. The codesign command reveals this, on my ARM64 development build:

codesign -dvvv ChimeraX.app
Executable=/Users/goddard/ucsf/chimerax/ChimeraX.app/Contents/MacOS/ChimeraX
Identifier=ChimeraX
Format=app bundle with Mach-O thin (arm64)
CodeDirectory v=20400 size=513 flags=0x20002(adhoc,linker-signed) hashes=13+0 location=embedded
Hash type=sha256 size=32
CandidateCDHash sha256=7ee198a5f3d238248eab5b3b1b5cba630a6baece
CandidateCDHashFull sha256=7ee198a5f3d238248eab5b3b1b5cba630a6baece0e9e89b409ca53a8b529aa40
Hash choices=sha256
CMSDigest=7ee198a5f3d238248eab5b3b1b5cba630a6baece0e9e89b409ca53a8b529aa40
CMSDigestType=2
CDHash=7ee198a5f3d238248eab5b3b1b5cba630a6baece
Signature=adhoc
Info.plist=not bound
TeamIdentifier=not set
Sealed Resources=none
Internal requirements=none

If I download a dmg with this adhoc signed app onto an M1 Mac I can copy the app to the Desktop but when I run it is says it is "damaged" and offers only to move it to the trash. To get it to run I can remove the HFS file system attributes from the dmg with

xattr -c chimerax.dmg

and then the extracted copy runs without any complaints, not even a warning about not being checked by Apple.

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

comment:22 by Zach Pearson, 4 years ago

Cc: Tom Goddard added
Owner: changed from Tom Goddard to Zach Pearson

Since I've been tasked with the CZI grant which includes porting ChimeraX to Apple Silicon, I'm reassigning this ticket to myself and adding Tom as a CC'd party, though any comments from any person CC'd on this ticket are always welcome.

Since the last update I've whitelisted scipy and matplotlib, both now have wheels for M1.

imagecodecs, netCDF4, and tables are still troublesome.

Ambertools21 and OpenMM both supposedly have releases which support M1.

Work in progress is on this branch on GitHub.

comment:23 by Zach Pearson, 4 years ago

While building ChimeraX without imagecodecs, netCDF4, and tables with the intent to release such a build is obviously not a good idea, it is possible to build (the Qt6 version of) ChimeraX on Apple Silicon currently with just those three packages excluded in prereqs/pips. Pasted below is a copy of the environment from the bug reporter, as well as the output of the Apple crash reporter after calling kill -6 on ChimeraX's pid.

Platform: macOS-12.2.1-arm64-arm-64bit

Env:

OpenGL version: 4.1 Metal - 76.3
OpenGL renderer: Apple M1 Pro
OpenGL vendor: Apple

Locale: UTF-8
Qt version: PyQt6 6.2.2, Qt 6.2.2
Qt platform: cocoa
Hardware:

    Hardware Overview:

      Model Name: MacBook Pro
      Model Identifier: MacBookPro18,1
      Chip: Apple M1 Pro
      Total Number of Cores: 10 (8 performance and 2 efficiency)
      Memory: 16 GB
      System Firmware Version: 7429.81.3
      OS Loader Version: 7429.81.3

Software:

    System Software Overview:

      System Version: macOS 12.2.1 (21D62)
      Kernel Version: Darwin 21.3.0
      Time since boot: 12 days 1:00

Graphics/Displays:

    Apple M1 Pro:

      Chipset Model: Apple M1 Pro
      Type: GPU
      Bus: Built-In
      Total Number of Cores: 16
      Vendor: Apple (0x106b)
      Metal Family: Supported, Metal GPUFamily Apple 7
      Displays:
        Color LCD:
          Display Type: Built-in Liquid Retina XDR Display
          Resolution: 3456 x 2234 Retina
          Main Display: Yes
          Mirror: Off
          Online: Yes
          Automatically Adjust Brightness: No
          Connection Type: Internal


Installed Packages:
    alabaster: 0.7.12
    appdirs: 1.4.4
    appnope: 0.1.2
    Babel: 2.9.1
    backcall: 0.2.0
    blockdiag: 3.0.0
    certifi: 2021.5.30
    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.0.1
    ChimeraX-AtomSearch: 2.0
    ChimeraX-AtomSearchLibrary: 1.0
    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-ColorActions: 1.0
    ChimeraX-ColorGlobe: 1.0
    ChimeraX-ColorKey: 1.5.1
    ChimeraX-CommandLine: 1.2.1
    ChimeraX-ConnectStructure: 2.0
    ChimeraX-Contacts: 1.0
    ChimeraX-Core: 1.4.dev202202240543
    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-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-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.1
    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.6
    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.7.7
    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.1
    ChimeraX-uniprot: 2.2
    ChimeraX-UnitCell: 1.0
    ChimeraX-ViewDockX: 1.1.1
    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
    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.29.1
    funcparserlib: 1.0.0a0
    grako: 3.16.5
    html2text: 2020.1.16
    idna: 3.3
    ihm: 0.26
    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
    networkx: 2.6.3
    numpy: 1.22.1
    openvr: 1.16.802
    packaging: 21.0
    ParmEd: 3.4.3
    parso: 0.8.3
    pexpect: 4.8.0
    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
    ptyprocess: 0.7.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: 6.2.2
    PyQt6-Qt6: 6.2.3
    PyQt6-sip: 13.2.0
    PyQt6-WebEngine: 6.2.1
    PyQt6-WebEngine-Qt6: 6.2.3
    python-dateutil: 2.8.2
    pytz: 2021.3
    pyzmq: 22.3.0
    qtconsole: 5.2.2
    QtPy: 2.0.1
    requests: 2.27.1
    scipy: 1.7.3
    setuptools: 59.8.0
    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
    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

Apple crash report:

-------------------------------------
Translated Report (Full Report Below)
-------------------------------------

Process:               ChimeraX [90267]
Path:                  /Users/USER/*/ChimeraX.app/Contents/MacOS/ChimeraX
Identifier:            edu.ucsf.cgl.ChimeraX
Version:               1.4.0 (1.4.0.0)
Code Type:             ARM-64 (Native)
Parent Process:        launchd [1]
User ID:               501

Date/Time:             2022-03-02 15:22:14.3894 -0800
OS Version:            macOS 12.2.1 (21D62)
Report Version:        12
Anonymous UUID:        5C21DB81-5826-C051-F2C6-A1924F9AF25A

Sleep/Wake UUID:       DC92BC9B-114F-40A4-A50E-54EB9581075D

Time Awake Since Boot: 120000 seconds
Time Since Wake:       702 seconds

System Integrity Protection: enabled

Crashed Thread:        0  CrBrowserMain  Dispatch queue: com.apple.main-thread

Exception Type:        EXC_CRASH (SIGABRT)
Exception Codes:       0x0000000000000000, 0x0000000000000000
Exception Note:        EXC_CORPSE_NOTIFY

Kernel Triage:
VM - pmap_enter failed with resource shortage
VM - pmap_enter failed with resource shortage
VM - pmap_enter failed with resource shortage
VM - pmap_enter failed with resource shortage
VM - pmap_enter failed with resource shortage


Thread 0 Crashed:: CrBrowserMain Dispatch queue: com.apple.main-thread
0   libsystem_kernel.dylib        	       0x1b12099b8 __pthread_kill + 8
1   libsystem_pthread.dylib       	       0x1b123ceb0 pthread_kill + 288
2   libsystem_c.dylib             	       0x1b1142ca4 raise + 32
3   libsystem_platform.dylib      	       0x1b12544e4 _sigtramp + 56
4   libsystem_kernel.dylib        	       0x1b1201d00 mach_msg + 76
5   CoreFoundation                	       0x1b1308ed8 __CFRunLoopServiceMachPort + 372
6   CoreFoundation                	       0x1b1307390 __CFRunLoopRun + 1212
7   CoreFoundation                	       0x1b1306734 CFRunLoopRunSpecific + 600
8   HIToolbox                     	       0x1b9e9ef68 RunCurrentEventLoopInMode + 292
9   HIToolbox                     	       0x1b9e9ecdc ReceiveNextEventCommon + 552
10  HIToolbox                     	       0x1b9e9ea9c _BlockUntilNextEventMatchingListInModeWithFilter + 72
11  AppKit                        	       0x1b3e5d000 _DPSNextEvent + 844
12  AppKit                        	       0x1b3e5b8a4 -[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] + 1332
13  AppKit                        	       0x1b3e4d9b4 -[NSApplication run] + 596
14  libqcocoa.dylib               	       0x1206acfb8 0x120698000 + 85944
15  QtCore                        	       0x11d104b3c QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) + 500
16  QtCore                        	       0x11d0fbe88 QCoreApplication::exec() + 128
17  QtWidgets.abi3.so             	       0x120047be8 meth_QApplication_exec(_object*, _object*) + 96
18  Python                        	       0x105969dd0 cfunction_call + 168
19  Python                        	       0x1059285cc _PyObject_MakeTpCall + 360
20  Python                        	       0x1059fc544 call_function + 512
21  Python                        	       0x1059f9e58 _PyEval_EvalFrameDefault + 23316
22  Python                        	       0x105928dc4 function_code_fastcall + 112
23  Python                        	       0x10592ad5c method_vectorcall + 168
24  Python                        	       0x1059fc4e4 call_function + 416
25  Python                        	       0x1059f9e58 _PyEval_EvalFrameDefault + 23316
26  Python                        	       0x1059fd45c _PyEval_EvalCode + 3072
27  Python                        	       0x105928d48 _PyFunction_Vectorcall + 256
28  Python                        	       0x1059fc4e4 call_function + 416
29  Python                        	       0x1059f9ed4 _PyEval_EvalFrameDefault + 23440
30  Python                        	       0x1059fd45c _PyEval_EvalCode + 3072
31  Python                        	       0x1059f427c PyEval_EvalCode + 80
32  Python                        	       0x1059f1058 builtin_exec + 672
33  Python                        	       0x1059694f8 cfunction_vectorcall_FASTCALL + 248
34  Python                        	       0x1059fc4e4 call_function + 416
35  Python                        	       0x1059f9ed4 _PyEval_EvalFrameDefault + 23440
36  Python                        	       0x1059fd45c _PyEval_EvalCode + 3072
37  Python                        	       0x105928d48 _PyFunction_Vectorcall + 256
38  Python                        	       0x1059fc4e4 call_function + 416
39  Python                        	       0x1059f9ed4 _PyEval_EvalFrameDefault + 23440
40  Python                        	       0x1059fd45c _PyEval_EvalCode + 3072
41  Python                        	       0x105928d48 _PyFunction_Vectorcall + 256
42  Python                        	       0x105a57408 pymain_run_module + 200
43  Python                        	       0x105a56a2c Py_RunMain + 744
44  Python                        	       0x105a572b8 pymain_main + 340
45  Python                        	       0x105a57158 Py_Main + 36
46  ChimeraX                      	       0x104e07dcc main + 128
47  dyld                          	       0x1050f10f4 start + 520

Thread 1:
0   libsystem_kernel.dylib        	       0x1b12050c0 __psynch_cvwait + 8
1   libsystem_pthread.dylib       	       0x1b123d808 _pthread_cond_wait + 1228
2   libopenblas64_.0.dylib        	       0x1078ecef8 blas_thread_server + 360
3   libsystem_pthread.dylib       	       0x1b123d240 _pthread_start + 148
4   libsystem_pthread.dylib       	       0x1b1238024 thread_start + 8

Thread 2:
0   libsystem_kernel.dylib        	       0x1b12050c0 __psynch_cvwait + 8
1   libsystem_pthread.dylib       	       0x1b123d808 _pthread_cond_wait + 1228
2   libopenblas64_.0.dylib        	       0x1078ecef8 blas_thread_server + 360
3   libsystem_pthread.dylib       	       0x1b123d240 _pthread_start + 148
4   libsystem_pthread.dylib       	       0x1b1238024 thread_start + 8

Thread 3:
0   libsystem_kernel.dylib        	       0x1b12050c0 __psynch_cvwait + 8
1   libsystem_pthread.dylib       	       0x1b123d808 _pthread_cond_wait + 1228
2   libopenblas64_.0.dylib        	       0x1078ecef8 blas_thread_server + 360
3   libsystem_pthread.dylib       	       0x1b123d240 _pthread_start + 148
4   libsystem_pthread.dylib       	       0x1b1238024 thread_start + 8

Thread 4:
0   libsystem_kernel.dylib        	       0x1b12050c0 __psynch_cvwait + 8
1   libsystem_pthread.dylib       	       0x1b123d808 _pthread_cond_wait + 1228
2   libopenblas64_.0.dylib        	       0x1078ecef8 blas_thread_server + 360
3   libsystem_pthread.dylib       	       0x1b123d240 _pthread_start + 148
4   libsystem_pthread.dylib       	       0x1b1238024 thread_start + 8

Thread 5:
0   libsystem_kernel.dylib        	       0x1b12050c0 __psynch_cvwait + 8
1   libsystem_pthread.dylib       	       0x1b123d808 _pthread_cond_wait + 1228
2   libopenblas64_.0.dylib        	       0x1078ecef8 blas_thread_server + 360
3   libsystem_pthread.dylib       	       0x1b123d240 _pthread_start + 148
4   libsystem_pthread.dylib       	       0x1b1238024 thread_start + 8

Thread 6:
0   libsystem_kernel.dylib        	       0x1b12050c0 __psynch_cvwait + 8
1   libsystem_pthread.dylib       	       0x1b123d808 _pthread_cond_wait + 1228
2   libopenblas64_.0.dylib        	       0x1078ecef8 blas_thread_server + 360
3   libsystem_pthread.dylib       	       0x1b123d240 _pthread_start + 148
4   libsystem_pthread.dylib       	       0x1b1238024 thread_start + 8

Thread 7:
0   libsystem_kernel.dylib        	       0x1b12050c0 __psynch_cvwait + 8
1   libsystem_pthread.dylib       	       0x1b123d808 _pthread_cond_wait + 1228
2   libopenblas64_.0.dylib        	       0x1078ecef8 blas_thread_server + 360
3   libsystem_pthread.dylib       	       0x1b123d240 _pthread_start + 148
4   libsystem_pthread.dylib       	       0x1b1238024 thread_start + 8

Thread 8:
0   libsystem_kernel.dylib        	       0x1b12050c0 __psynch_cvwait + 8
1   libsystem_pthread.dylib       	       0x1b123d808 _pthread_cond_wait + 1228
2   libopenblas64_.0.dylib        	       0x1078ecef8 blas_thread_server + 360
3   libsystem_pthread.dylib       	       0x1b123d240 _pthread_start + 148
4   libsystem_pthread.dylib       	       0x1b1238024 thread_start + 8

Thread 9:
0   libsystem_kernel.dylib        	       0x1b12050c0 __psynch_cvwait + 8
1   libsystem_pthread.dylib       	       0x1b123d808 _pthread_cond_wait + 1228
2   libopenblas64_.0.dylib        	       0x1078ecef8 blas_thread_server + 360
3   libsystem_pthread.dylib       	       0x1b123d240 _pthread_start + 148
4   libsystem_pthread.dylib       	       0x1b1238024 thread_start + 8

Thread 10:
0   libsystem_pthread.dylib       	       0x1b1238010 start_wqthread + 0

Thread 11:
0   libsystem_pthread.dylib       	       0x1b1238010 start_wqthread + 0

Thread 12:
0   libsystem_pthread.dylib       	       0x1b1238010 start_wqthread + 0

Thread 13:: ThreadPoolServiceThread
0   libsystem_kernel.dylib        	       0x1b120ca48 kevent64 + 8
1   QtWebEngineCore               	       0x176cdba20 0x1740f0000 + 46053920
2   QtWebEngineCore               	       0x176cdb958 0x1740f0000 + 46053720
3   QtWebEngineCore               	       0x176c701f0 0x1740f0000 + 45613552
4   QtWebEngineCore               	       0x176c3a140 0x1740f0000 + 45392192
5   QtWebEngineCore               	       0x176c93098 0x1740f0000 + 45756568
6   QtWebEngineCore               	       0x176c7c318 0x1740f0000 + 45663000
7   QtWebEngineCore               	       0x176c93244 0x1740f0000 + 45756996
8   QtWebEngineCore               	       0x176cb982c 0x1740f0000 + 45914156
9   libsystem_pthread.dylib       	       0x1b123d240 _pthread_start + 148
10  libsystem_pthread.dylib       	       0x1b1238024 thread_start + 8

Thread 14:: ThreadPoolForegroundWorker
0   libsystem_kernel.dylib        	       0x1b1201954 mach_msg_trap + 8
1   libsystem_kernel.dylib        	       0x1b1201d00 mach_msg + 76
2   QtWebEngineCore               	       0x176cbfd10 0x1740f0000 + 45939984
3   QtWebEngineCore               	       0x176c87650 0x1740f0000 + 45708880
4   QtWebEngineCore               	       0x176c880b0 0x1740f0000 + 45711536
5   QtWebEngineCore               	       0x176c87d08 0x1740f0000 + 45710600
6   QtWebEngineCore               	       0x176cb982c 0x1740f0000 + 45914156
7   libsystem_pthread.dylib       	       0x1b123d240 _pthread_start + 148
8   libsystem_pthread.dylib       	       0x1b1238024 thread_start + 8

Thread 15:: ThreadPoolBackgroundWorker
0   libsystem_kernel.dylib        	       0x1b1201954 mach_msg_trap + 8
1   libsystem_kernel.dylib        	       0x1b1201d00 mach_msg + 76
2   QtWebEngineCore               	       0x176cbfd10 0x1740f0000 + 45939984
3   QtWebEngineCore               	       0x176c87650 0x1740f0000 + 45708880
4   QtWebEngineCore               	       0x176c87e6c 0x1740f0000 + 45710956
5   QtWebEngineCore               	       0x176c87c84 0x1740f0000 + 45710468
6   QtWebEngineCore               	       0x176cb982c 0x1740f0000 + 45914156
7   libsystem_pthread.dylib       	       0x1b123d240 _pthread_start + 148
8   libsystem_pthread.dylib       	       0x1b1238024 thread_start + 8

Thread 16:: Chrome_IOThread
0   libsystem_kernel.dylib        	       0x1b120ca48 kevent64 + 8
1   QtWebEngineCore               	       0x176cdba20 0x1740f0000 + 46053920
2   QtWebEngineCore               	       0x176cdb958 0x1740f0000 + 46053720
3   QtWebEngineCore               	       0x176c701f0 0x1740f0000 + 45613552
4   QtWebEngineCore               	       0x176c3a140 0x1740f0000 + 45392192
5   QtWebEngineCore               	       0x176c93098 0x1740f0000 + 45756568
6   QtWebEngineCore               	       0x17adfe70c 0x1740f0000 + 114353932
7   QtWebEngineCore               	       0x176c93244 0x1740f0000 + 45756996
8   QtWebEngineCore               	       0x176cb982c 0x1740f0000 + 45914156
9   libsystem_pthread.dylib       	       0x1b123d240 _pthread_start + 148
10  libsystem_pthread.dylib       	       0x1b1238024 thread_start + 8

Thread 17:: NetworkConfigWatcher
0   libsystem_kernel.dylib        	       0x1b1201954 mach_msg_trap + 8
1   libsystem_kernel.dylib        	       0x1b1201d00 mach_msg + 76
2   QtWebEngineCore               	       0x176cbfd10 0x1740f0000 + 45939984
3   QtWebEngineCore               	       0x176cbfaf8 0x1740f0000 + 45939448
4   QtWebEngineCore               	       0x176c0ddd8 0x1740f0000 + 45211096
5   QtWebEngineCore               	       0x176c701f0 0x1740f0000 + 45613552
6   QtWebEngineCore               	       0x176c3a140 0x1740f0000 + 45392192
7   QtWebEngineCore               	       0x176c93098 0x1740f0000 + 45756568
8   QtWebEngineCore               	       0x176c93244 0x1740f0000 + 45756996
9   QtWebEngineCore               	       0x176cb982c 0x1740f0000 + 45914156
10  libsystem_pthread.dylib       	       0x1b123d240 _pthread_start + 148
11  libsystem_pthread.dylib       	       0x1b1238024 thread_start + 8

Thread 18:: ThreadPoolForegroundWorker
0   libsystem_kernel.dylib        	       0x1b1201954 mach_msg_trap + 8
1   libsystem_kernel.dylib        	       0x1b1201d00 mach_msg + 76
2   QtWebEngineCore               	       0x176cbfd10 0x1740f0000 + 45939984
3   QtWebEngineCore               	       0x176c87650 0x1740f0000 + 45708880
4   QtWebEngineCore               	       0x176c880b0 0x1740f0000 + 45711536
5   QtWebEngineCore               	       0x176c87d08 0x1740f0000 + 45710600
6   QtWebEngineCore               	       0x176cb982c 0x1740f0000 + 45914156
7   libsystem_pthread.dylib       	       0x1b123d240 _pthread_start + 148
8   libsystem_pthread.dylib       	       0x1b1238024 thread_start + 8

Thread 19:: ThreadPoolForegroundWorker
0   libsystem_kernel.dylib        	       0x1b1201954 mach_msg_trap + 8
1   libsystem_kernel.dylib        	       0x1b1201d00 mach_msg + 76
2   QtWebEngineCore               	       0x176cbfd10 0x1740f0000 + 45939984
3   QtWebEngineCore               	       0x176c87650 0x1740f0000 + 45708880
4   QtWebEngineCore               	       0x176c880b0 0x1740f0000 + 45711536
5   QtWebEngineCore               	       0x176c87d08 0x1740f0000 + 45710600
6   QtWebEngineCore               	       0x176cb982c 0x1740f0000 + 45914156
7   libsystem_pthread.dylib       	       0x1b123d240 _pthread_start + 148
8   libsystem_pthread.dylib       	       0x1b1238024 thread_start + 8

Thread 20:: ThreadPoolForegroundWorker
0   libsystem_kernel.dylib        	       0x1b1201954 mach_msg_trap + 8
1   libsystem_kernel.dylib        	       0x1b1201d00 mach_msg + 76
2   QtWebEngineCore               	       0x176cbfd10 0x1740f0000 + 45939984
3   QtWebEngineCore               	       0x176c87650 0x1740f0000 + 45708880
4   QtWebEngineCore               	       0x176c87e6c 0x1740f0000 + 45710956
5   QtWebEngineCore               	       0x176c87d08 0x1740f0000 + 45710600
6   QtWebEngineCore               	       0x176cb982c 0x1740f0000 + 45914156
7   libsystem_pthread.dylib       	       0x1b123d240 _pthread_start + 148
8   libsystem_pthread.dylib       	       0x1b1238024 thread_start + 8

Thread 21:: CompositorTileWorker1
0   libsystem_kernel.dylib        	       0x1b12050c0 __psynch_cvwait + 8
1   libsystem_pthread.dylib       	       0x1b123d808 _pthread_cond_wait + 1228
2   QtWebEngineCore               	       0x176cb83a0 0x1740f0000 + 45908896
3   QtWebEngineCore               	       0x1785d6f48 0x1740f0000 + 72249160
4   QtWebEngineCore               	       0x176cb982c 0x1740f0000 + 45914156
5   libsystem_pthread.dylib       	       0x1b123d240 _pthread_start + 148
6   libsystem_pthread.dylib       	       0x1b1238024 thread_start + 8

Thread 22:: Chrome_InProcGpuThread
0   libsystem_kernel.dylib        	       0x1b1201954 mach_msg_trap + 8
1   libsystem_kernel.dylib        	       0x1b1201d00 mach_msg + 76
2   QtWebEngineCore               	       0x176cbfd10 0x1740f0000 + 45939984
3   QtWebEngineCore               	       0x176cbfaf8 0x1740f0000 + 45939448
4   QtWebEngineCore               	       0x176c0ddd8 0x1740f0000 + 45211096
5   QtWebEngineCore               	       0x176c701f0 0x1740f0000 + 45613552
6   QtWebEngineCore               	       0x176c3a140 0x1740f0000 + 45392192
7   QtWebEngineCore               	       0x176c93098 0x1740f0000 + 45756568
8   QtWebEngineCore               	       0x176c93244 0x1740f0000 + 45756996
9   QtWebEngineCore               	       0x176cb982c 0x1740f0000 + 45914156
10  libsystem_pthread.dylib       	       0x1b123d240 _pthread_start + 148
11  libsystem_pthread.dylib       	       0x1b1238024 thread_start + 8

Thread 23:: Chrome_ChildIOThread
0   libsystem_kernel.dylib        	       0x1b120ca48 kevent64 + 8
1   QtWebEngineCore               	       0x176cdba20 0x1740f0000 + 46053920
2   QtWebEngineCore               	       0x176cdb958 0x1740f0000 + 46053720
3   QtWebEngineCore               	       0x176c701f0 0x1740f0000 + 45613552
4   QtWebEngineCore               	       0x176c3a140 0x1740f0000 + 45392192
5   QtWebEngineCore               	       0x176c93098 0x1740f0000 + 45756568
6   QtWebEngineCore               	       0x176c93244 0x1740f0000 + 45756996
7   QtWebEngineCore               	       0x176cb982c 0x1740f0000 + 45914156
8   libsystem_pthread.dylib       	       0x1b123d240 _pthread_start + 148
9   libsystem_pthread.dylib       	       0x1b1238024 thread_start + 8

Thread 24:: NetworkConfigWatcher
0   libsystem_kernel.dylib        	       0x1b1201954 mach_msg_trap + 8
1   libsystem_kernel.dylib        	       0x1b1201d00 mach_msg + 76
2   QtWebEngineCore               	       0x176cbfd10 0x1740f0000 + 45939984
3   QtWebEngineCore               	       0x176cbfaf8 0x1740f0000 + 45939448
4   QtWebEngineCore               	       0x176c0ddd8 0x1740f0000 + 45211096
5   QtWebEngineCore               	       0x176c701f0 0x1740f0000 + 45613552
6   QtWebEngineCore               	       0x176c3a140 0x1740f0000 + 45392192
7   QtWebEngineCore               	       0x176c93098 0x1740f0000 + 45756568
8   QtWebEngineCore               	       0x176c93244 0x1740f0000 + 45756996
9   QtWebEngineCore               	       0x176cb982c 0x1740f0000 + 45914156
10  libsystem_pthread.dylib       	       0x1b123d240 _pthread_start + 148
11  libsystem_pthread.dylib       	       0x1b1238024 thread_start + 8

Thread 25:: VizCompositorThread
0   libsystem_kernel.dylib        	       0x1b1201954 mach_msg_trap + 8
1   libsystem_kernel.dylib        	       0x1b1201d00 mach_msg + 76
2   QtWebEngineCore               	       0x176cbfd10 0x1740f0000 + 45939984
3   QtWebEngineCore               	       0x176cbfaf8 0x1740f0000 + 45939448
4   QtWebEngineCore               	       0x176c0ddd8 0x1740f0000 + 45211096
5   QtWebEngineCore               	       0x176c701f0 0x1740f0000 + 45613552
6   QtWebEngineCore               	       0x176c3a140 0x1740f0000 + 45392192
7   QtWebEngineCore               	       0x176c93098 0x1740f0000 + 45756568
8   QtWebEngineCore               	       0x176c93244 0x1740f0000 + 45756996
9   QtWebEngineCore               	       0x176cb982c 0x1740f0000 + 45914156
10  libsystem_pthread.dylib       	       0x1b123d240 _pthread_start + 148
11  libsystem_pthread.dylib       	       0x1b1238024 thread_start + 8

Thread 26:: NetworkService
0   libsystem_kernel.dylib        	       0x1b120ca48 kevent64 + 8
1   QtWebEngineCore               	       0x176cdba20 0x1740f0000 + 46053920
2   QtWebEngineCore               	       0x176cdb958 0x1740f0000 + 46053720
3   QtWebEngineCore               	       0x176c701f0 0x1740f0000 + 45613552
4   QtWebEngineCore               	       0x176c3a140 0x1740f0000 + 45392192
5   QtWebEngineCore               	       0x176c93098 0x1740f0000 + 45756568
6   QtWebEngineCore               	       0x176c93244 0x1740f0000 + 45756996
7   QtWebEngineCore               	       0x176cb982c 0x1740f0000 + 45914156
8   libsystem_pthread.dylib       	       0x1b123d240 _pthread_start + 148
9   libsystem_pthread.dylib       	       0x1b1238024 thread_start + 8

Thread 27:: NetworkConfigWatcher
0   libsystem_kernel.dylib        	       0x1b1201954 mach_msg_trap + 8
1   libsystem_kernel.dylib        	       0x1b1201d00 mach_msg + 76
2   QtWebEngineCore               	       0x176cbfd10 0x1740f0000 + 45939984
3   QtWebEngineCore               	       0x176cbfaf8 0x1740f0000 + 45939448
4   QtWebEngineCore               	       0x176c0ddd8 0x1740f0000 + 45211096
5   QtWebEngineCore               	       0x176c701f0 0x1740f0000 + 45613552
6   QtWebEngineCore               	       0x176c3a140 0x1740f0000 + 45392192
7   QtWebEngineCore               	       0x176c93098 0x1740f0000 + 45756568
8   QtWebEngineCore               	       0x176c93244 0x1740f0000 + 45756996
9   QtWebEngineCore               	       0x176cb982c 0x1740f0000 + 45914156
10  libsystem_pthread.dylib       	       0x1b123d240 _pthread_start + 148
11  libsystem_pthread.dylib       	       0x1b1238024 thread_start + 8

Thread 28:: ThreadPoolSingleThreadForegroundBlocking0
0   libsystem_kernel.dylib        	       0x1b1201954 mach_msg_trap + 8
1   libsystem_kernel.dylib        	       0x1b1201d00 mach_msg + 76
2   QtWebEngineCore               	       0x176cbfd10 0x1740f0000 + 45939984
3   QtWebEngineCore               	       0x176cbfaf8 0x1740f0000 + 45939448
4   QtWebEngineCore               	       0x176c87640 0x1740f0000 + 45708864
5   QtWebEngineCore               	       0x176c880b0 0x1740f0000 + 45711536
6   QtWebEngineCore               	       0x176c87d60 0x1740f0000 + 45710688
7   QtWebEngineCore               	       0x176cb982c 0x1740f0000 + 45914156
8   libsystem_pthread.dylib       	       0x1b123d240 _pthread_start + 148
9   libsystem_pthread.dylib       	       0x1b1238024 thread_start + 8

Thread 29:: Thread (pooled)
0   libsystem_kernel.dylib        	       0x1b12050c0 __psynch_cvwait + 8
1   libsystem_pthread.dylib       	       0x1b123d808 _pthread_cond_wait + 1228
2   QtCore                        	       0x11d263758 0x11d06c000 + 2062168
3   QtCore                        	       0x11d263410 0x11d06c000 + 2061328
4   QtCore                        	       0x11d263350 QWaitCondition::wait(QMutex*, QDeadlineTimer) + 108
5   QtCore                        	       0x11d25dc50 0x11d06c000 + 2038864
6   QtCore                        	       0x11d258ce4 0x11d06c000 + 2018532
7   libsystem_pthread.dylib       	       0x1b123d240 _pthread_start + 148
8   libsystem_pthread.dylib       	       0x1b1238024 thread_start + 8

Thread 30:: Thread (pooled)
0   libsystem_kernel.dylib        	       0x1b12050c0 __psynch_cvwait + 8
1   libsystem_pthread.dylib       	       0x1b123d808 _pthread_cond_wait + 1228
2   QtCore                        	       0x11d263758 0x11d06c000 + 2062168
3   QtCore                        	       0x11d263410 0x11d06c000 + 2061328
4   QtCore                        	       0x11d263350 QWaitCondition::wait(QMutex*, QDeadlineTimer) + 108
5   QtCore                        	       0x11d25dc50 0x11d06c000 + 2038864
6   QtCore                        	       0x11d258ce4 0x11d06c000 + 2018532
7   libsystem_pthread.dylib       	       0x1b123d240 _pthread_start + 148
8   libsystem_pthread.dylib       	       0x1b1238024 thread_start + 8

Thread 31:: Thread (pooled)
0   libsystem_kernel.dylib        	       0x1b12050c0 __psynch_cvwait + 8
1   libsystem_pthread.dylib       	       0x1b123d808 _pthread_cond_wait + 1228
2   QtCore                        	       0x11d263758 0x11d06c000 + 2062168
3   QtCore                        	       0x11d263410 0x11d06c000 + 2061328
4   QtCore                        	       0x11d263350 QWaitCondition::wait(QMutex*, QDeadlineTimer) + 108
5   QtCore                        	       0x11d25dc50 0x11d06c000 + 2038864
6   QtCore                        	       0x11d258ce4 0x11d06c000 + 2018532
7   libsystem_pthread.dylib       	       0x1b123d240 _pthread_start + 148
8   libsystem_pthread.dylib       	       0x1b1238024 thread_start + 8

Thread 32:: Thread (pooled)
0   libsystem_kernel.dylib        	       0x1b12050c0 __psynch_cvwait + 8
1   libsystem_pthread.dylib       	       0x1b123d808 _pthread_cond_wait + 1228
2   QtCore                        	       0x11d263758 0x11d06c000 + 2062168
3   QtCore                        	       0x11d263410 0x11d06c000 + 2061328
4   QtCore                        	       0x11d263350 QWaitCondition::wait(QMutex*, QDeadlineTimer) + 108
5   QtCore                        	       0x11d25dc50 0x11d06c000 + 2038864
6   QtCore                        	       0x11d258ce4 0x11d06c000 + 2018532
7   libsystem_pthread.dylib       	       0x1b123d240 _pthread_start + 148
8   libsystem_pthread.dylib       	       0x1b1238024 thread_start + 8

Thread 33:: NetworkConfigWatcher
0   libsystem_kernel.dylib        	       0x1b1201954 mach_msg_trap + 8
1   libsystem_kernel.dylib        	       0x1b1201d00 mach_msg + 76
2   QtWebEngineCore               	       0x176cbfd10 0x1740f0000 + 45939984
3   QtWebEngineCore               	       0x176cbfaf8 0x1740f0000 + 45939448
4   QtWebEngineCore               	       0x176c0ddd8 0x1740f0000 + 45211096
5   QtWebEngineCore               	       0x176c701f0 0x1740f0000 + 45613552
6   QtWebEngineCore               	       0x176c3a140 0x1740f0000 + 45392192
7   QtWebEngineCore               	       0x176c93098 0x1740f0000 + 45756568
8   QtWebEngineCore               	       0x176c93244 0x1740f0000 + 45756996
9   QtWebEngineCore               	       0x176cb982c 0x1740f0000 + 45914156
10  libsystem_pthread.dylib       	       0x1b123d240 _pthread_start + 148
11  libsystem_pthread.dylib       	       0x1b1238024 thread_start + 8

Thread 34:
0   libsystem_pthread.dylib       	       0x1b1238010 start_wqthread + 0

Thread 35:
0   libsystem_pthread.dylib       	       0x1b1238010 start_wqthread + 0

Thread 36:
0   libsystem_pthread.dylib       	       0x1b1238010 start_wqthread + 0

Thread 37:
0   libsystem_pthread.dylib       	       0x1b1238010 start_wqthread + 0

Thread 38:: com.apple.NSEventThread
0   libsystem_kernel.dylib        	       0x1b1201954 mach_msg_trap + 8
1   libsystem_kernel.dylib        	       0x1b1201d00 mach_msg + 76
2   CoreFoundation                	       0x1b1308ed8 __CFRunLoopServiceMachPort + 372
3   CoreFoundation                	       0x1b1307390 __CFRunLoopRun + 1212
4   CoreFoundation                	       0x1b1306734 CFRunLoopRunSpecific + 600
5   AppKit                        	       0x1b3fc9fb0 _NSEventThread + 196
6   libsystem_pthread.dylib       	       0x1b123d240 _pthread_start + 148
7   libsystem_pthread.dylib       	       0x1b1238024 thread_start + 8

Thread 39:: MemoryInfra
0   libsystem_kernel.dylib        	       0x1b1201954 mach_msg_trap + 8
1   libsystem_kernel.dylib        	       0x1b1201d00 mach_msg + 76
2   QtWebEngineCore               	       0x176cbfd10 0x1740f0000 + 45939984
3   QtWebEngineCore               	       0x176cbfaf8 0x1740f0000 + 45939448
4   QtWebEngineCore               	       0x176c0ddd8 0x1740f0000 + 45211096
5   QtWebEngineCore               	       0x176c701f0 0x1740f0000 + 45613552
6   QtWebEngineCore               	       0x176c3a140 0x1740f0000 + 45392192
7   QtWebEngineCore               	       0x176c93098 0x1740f0000 + 45756568
8   QtWebEngineCore               	       0x176c93244 0x1740f0000 + 45756996
9   QtWebEngineCore               	       0x176cb982c 0x1740f0000 + 45914156
10  libsystem_pthread.dylib       	       0x1b123d240 _pthread_start + 148
11  libsystem_pthread.dylib       	       0x1b1238024 thread_start + 8

Thread 40:: ThreadPoolSingleThreadSharedBackgroundBlocking1
0   libsystem_kernel.dylib        	       0x1b1201954 mach_msg_trap + 8
1   libsystem_kernel.dylib        	       0x1b1201d00 mach_msg + 76
2   QtWebEngineCore               	       0x176cbfd10 0x1740f0000 + 45939984
3   QtWebEngineCore               	       0x176cbfaf8 0x1740f0000 + 45939448
4   QtWebEngineCore               	       0x176c87640 0x1740f0000 + 45708864
5   QtWebEngineCore               	       0x176c87e6c 0x1740f0000 + 45710956
6   QtWebEngineCore               	       0x176c87cb0 0x1740f0000 + 45710512
7   QtWebEngineCore               	       0x176cb982c 0x1740f0000 + 45914156
8   libsystem_pthread.dylib       	       0x1b123d240 _pthread_start + 148
9   libsystem_pthread.dylib       	       0x1b1238024 thread_start + 8


Thread 0 crashed with ARM Thread State (64-bit):
    x0: 0x0000000000000000   x1: 0x0000000000000000   x2: 0x0000000000000001   x3: 0x00000001b12517cc
    x4: 0x0000000128047c18   x5: 0x2fc98ea7e8801683   x6: 0x0000000000000000   x7: 0x000060000109cea0
    x8: 0xbe820a395a036ed2   x9: 0xbe820a385f152b52  x10: 0x0000000000000000  x11: 0x00000001052c69c0
   x12: 0x00000000016e3600  x13: 0x000000000063578d  x14: 0x0000000000000001  x15: 0x0000100000001002
   x16: 0x0000000000000148  x17: 0x000000020ba73530  x18: 0x0000000128483940  x19: 0x0000000000000006
   x20: 0x0000000105164580  x21: 0x0000000000000103  x22: 0x0000000000000c00  x23: 0x000000016aff8d20
   x24: 0x0000000007000806  x25: 0x0000000000000000  x26: 0x0000000007000806  x27: 0x0000000000004a03
   x28: 0x0000000000004a03   fp: 0x0000000128047b50   lr: 0x00000001b123ceb0
    sp: 0x0000000128047b30   pc: 0x00000001b12099b8 cpsr: 0x40001000
   far: 0x0000000128047bb0  esr: 0x56000080  Address size fault

Binary Images:
       0x1b1200000 -        0x1b1235fff libsystem_kernel.dylib (*) <384945e6-dd71-37e5-9a3d-84fff14a1e60> /usr/lib/system/libsystem_kernel.dylib
       0x1b1236000 -        0x1b1242fff libsystem_pthread.dylib (*) <f7b2eccf-e6f1-3109-ae81-9028c0b8332a> /usr/lib/system/libsystem_pthread.dylib
       0x1b1101000 -        0x1b1181fff libsystem_c.dylib (*) <0dbc8b95-0037-3725-a769-0c772c293488> /usr/lib/system/libsystem_c.dylib
       0x1b1250000 -        0x1b1257fff libsystem_platform.dylib (*) <49cf1536-27e5-3a34-9724-d75552cbab56> /usr/lib/system/libsystem_platform.dylib
       0x1b1284000 -        0x1b17c7fff com.apple.CoreFoundation (6.9) <35473de6-c433-332c-aee0-013fd5f6d4fd> /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation
       0x1b9e6c000 -        0x1ba19bfff com.apple.HIToolbox (2.1.1) <b5a3fe9a-833b-3697-ac9c-1e9e8eb11bac> /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/HIToolbox
       0x1b3e1b000 -        0x1b4cd1fff com.apple.AppKit (6.9) <8701760d-31b6-37eb-be77-ffb39921dd22> /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit
       0x120698000 -        0x12072bfff libqcocoa.dylib (*) <bfcf26c7-0cc9-3ee3-a488-8647073e4fda> /Users/USER/*/ChimeraX.app/Contents/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/PyQt6/Qt6/plugins/platforms/libqcocoa.dylib
       0x11d06c000 -        0x11d4b3fff QtCore (*) <8e087af8-99fe-368f-a2f5-8cac45da755d> /Users/USER/*/ChimeraX.app/Contents/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/PyQt6/Qt6/lib/QtCore.framework/Versions/A/QtCore
       0x11fdec000 -        0x1200cbfff QtWidgets.abi3.so (*) <cb6bf878-5499-3497-a87c-76b83c9156d6> /Users/USER/*/ChimeraX.app/Contents/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/PyQt6/QtWidgets.abi3.so
       0x1058e8000 -        0x105b4ffff org.python.python (3.9.6, (c) 2001-2019 Python Software Foundation.) <1d0528e1-f5ed-3747-904f-70bf63e4e283> /Users/USER/*/ChimeraX.app/Contents/Library/Frameworks/Python.framework/Versions/3.9/Python
       0x104e04000 -        0x104e07fff edu.ucsf.cgl.ChimeraX (1.4.0) <14d0717f-ca24-3ba7-b277-d7edabf09fb5> /Users/USER/*/ChimeraX.app/Contents/MacOS/ChimeraX
       0x1050ec000 -        0x10514bfff dyld (*) <d21a73ea-79cd-36eb-8ac9-2c5cf5181a27> /usr/lib/dyld
       0x107784000 -        0x1089cbfff libopenblas64_.0.dylib (*) <0672674f-0fbf-3245-8fec-358e42c77be2> /Users/USER/*/ChimeraX.app/Contents/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/numpy/.dylibs/libopenblas64_.0.dylib
       0x1740f0000 -        0x17c34bfff QtWebEngineCore (*) <cfa5ae29-512c-39df-a082-53b32ac7d003> /Users/USER/*/ChimeraX.app/Contents/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/PyQt6/Qt6/lib/QtWebEngineCore.framework/Versions/A/QtWebEngineCore

External Modification Summary:
  Calls made by other processes targeting this process:
    task_for_pid: 0
    thread_create: 0
    thread_set_state: 0
  Calls made by this process:
    task_for_pid: 0
    thread_create: 0
    thread_set_state: 0
  Calls made by all processes on this machine:
    task_for_pid: 0
    thread_create: 0
    thread_set_state: 0

VM Region Summary:
ReadOnly portion of Libraries: Total=1.2G resident=0K(0%) swapped_out_or_unallocated=1.2G(100%)
Writable regions: Total=1.9G written=0K(0%) resident=0K(0%) swapped_out=0K(0%) unallocated=1.9G(100%)

                                VIRTUAL   REGION 
REGION TYPE                        SIZE    COUNT (non-coalesced) 
===========                     =======  ======= 
Accelerate framework               384K        3 
Activity Tracing                   256K        1 
CG backing stores                 4032K        4 
CG image                            96K        3 
ColorSync                          608K       26 
CoreAnimation                      208K       12 
CoreGraphics                        32K        2 
CoreUI image data                 2576K       16 
Foundation                          16K        1 
Kernel Alloc Once                   32K        1 
MALLOC                           333.5M       67 
MALLOC guard page                  192K        9 
MALLOC_MEDIUM (reserved)         688.0M        6         reserved VM address space (unallocated)
MALLOC_NANO (reserved)           384.0M        1         reserved VM address space (unallocated)
Mach message                        64K        2 
OpenGL GLSL                        384K        4 
STACK GUARD                        640K       40 
Stack                            171.4M       41 
Stack Guard                       56.0M        1 
VM_ALLOCATE                      137.7M      205 
VM_ALLOCATE (reserved)           224.0M        1         reserved VM address space (unallocated)
__AUTH                            2570K      308 
__AUTH_CONST                      19.7M      499 
__DATA                            23.5M      602 
__DATA_CONST                      25.9M      614 
__DATA_DIRTY                      1787K      215 
__FONT_DATA                          4K        1 
__GLSLBUILTINS                    5176K        1 
__LINKEDIT                       599.4M      114 
__OBJC_CONST                      3569K      273 
__OBJC_RO                         82.1M        1 
__OBJC_RW                         3104K        1 
__TEXT                           676.6M      632 
__UNICODE                          588K        1 
dyld private memory               1184K        3 
mapped file                      180.7M       45 
shared memory                     3200K       26 
===========                     =======  ======= 
TOTAL                              3.5G     3782 
TOTAL, minus reserved VM space     2.3G     3782 



-----------
Full Report
-----------

{"app_name":"ChimeraX","timestamp":"2022-03-02 15:22:23.00 -0800","app_version":"1.4.0","slice_uuid":"14d0717f-ca24-3ba7-b277-d7edabf09fb5","build_version":"1.4.0.0","platform":1,"bundleID":"edu.ucsf.cgl.ChimeraX","share_with_app_devs":0,"is_first_party":0,"bug_type":"309","os_version":"macOS 12.2.1 (21D62)","incident_id":"E2B4CBA8-5813-45D7-8CCC-5D6BBEFFA21D","name":"ChimeraX"}
{
  "uptime" : 120000,
  "procLaunch" : "2022-03-02 15:21:58.7297 -0800",
  "procRole" : "Background",
  "version" : 2,
  "userID" : 501,
  "deployVersion" : 210,
  "modelCode" : "MacBookPro18,1",
  "procStartAbsTime" : 3043901702513,
  "coalitionID" : 17965,
  "osVersion" : {
    "train" : "macOS 12.2.1",
    "build" : "21D62",
    "releaseType" : "User"
  },
  "captureTime" : "2022-03-02 15:22:14.3894 -0800",
  "incident" : "E2B4CBA8-5813-45D7-8CCC-5D6BBEFFA21D",
  "bug_type" : "309",
  "pid" : 90267,
  "procExitAbsTime" : 3044277164177,
  "translated" : false,
  "cpuType" : "ARM-64",
  "procName" : "ChimeraX",
  "procPath" : "\/Users\/USER\/*\/ChimeraX.app\/Contents\/MacOS\/ChimeraX",
  "bundleInfo" : {"CFBundleShortVersionString":"1.4.0","CFBundleVersion":"1.4.0.0","CFBundleIdentifier":"edu.ucsf.cgl.ChimeraX"},
  "storeInfo" : {"deviceIdentifierForVendor":"B3A2C5DA-D8C5-54F0-A3CA-1E2ED4DEC9C9","thirdParty":true},
  "parentProc" : "launchd",
  "parentPid" : 1,
  "coalitionName" : "edu.ucsf.cgl.ChimeraX",
  "crashReporterKey" : "5C21DB81-5826-C051-F2C6-A1924F9AF25A",
  "wakeTime" : 702,
  "sleepWakeUUID" : "DC92BC9B-114F-40A4-A50E-54EB9581075D",
  "sip" : "enabled",
  "isCorpse" : 1,
  "exception" : {"codes":"0x0000000000000000, 0x0000000000000000","rawCodes":[0,0],"type":"EXC_CRASH","signal":"SIGABRT"},
  "ktriageinfo" : "VM - pmap_enter failed with resource shortage\nVM - pmap_enter failed with resource shortage\nVM - pmap_enter failed with resource shortage\nVM - pmap_enter failed with resource shortage\nVM - pmap_enter failed with resource shortage\n",
  "extMods" : {"caller":{"thread_create":0,"thread_set_state":0,"task_for_pid":0},"system":{"thread_create":0,"thread_set_state":0,"task_for_pid":0},"targeted":{"thread_create":0,"thread_set_state":0,"task_for_pid":0},"warnings":0},
  "faultingThread" : 0,
  "threads" : [{"triggered":true,"id":2327269,"threadState":{"x":[{"value":0},{"value":0},{"value":1},{"value":7266965452},{"value":4966349848},{"value":3443440241912845955},{"value":0},{"value":105553133686432},{"value":13727545855618281170},{"value":13727545851408362322},{"value":0},{"value":4381764032},{"value":24000000},{"value":6510477},{"value":1},{"value":17592186048514},{"value":328},{"value":8785442096},{"value":4970789184},{"value":6},{"value":4380312960,"symbolLocation":0,"symbol":"_main_thread"},{"value":259},{"value":3072},{"value":6090100000},{"value":117442566},{"value":0},{"value":117442566},{"value":18947},{"value":18947}],"flavor":"ARM_THREAD_STATE64","lr":{"value":7266881200},"cpsr":{"value":1073745920},"fp":{"value":4966349648},"sp":{"value":4966349616},"esr":{"value":1442840704,"description":" Address size fault"},"pc":{"value":7266671032,"matchesCrashFrame":1},"far":{"value":4966349744}},"name":"CrBrowserMain","queue":"com.apple.main-thread","frames":[{"imageOffset":39352,"symbol":"__pthread_kill","symbolLocation":8,"imageIndex":0},{"imageOffset":28336,"symbol":"pthread_kill","symbolLocation":288,"imageIndex":1},{"imageOffset":269476,"symbol":"raise","symbolLocation":32,"imageIndex":2},{"imageOffset":17636,"symbol":"_sigtramp","symbolLocation":56,"imageIndex":3},{"imageOffset":7424,"symbol":"mach_msg","symbolLocation":76,"imageIndex":0},{"imageOffset":544472,"symbol":"__CFRunLoopServiceMachPort","symbolLocation":372,"imageIndex":4},{"imageOffset":537488,"symbol":"__CFRunLoopRun","symbolLocation":1212,"imageIndex":4},{"imageOffset":534324,"symbol":"CFRunLoopRunSpecific","symbolLocation":600,"imageIndex":4},{"imageOffset":208744,"symbol":"RunCurrentEventLoopInMode","symbolLocation":292,"imageIndex":5},{"imageOffset":208092,"symbol":"ReceiveNextEventCommon","symbolLocation":552,"imageIndex":5},{"imageOffset":207516,"symbol":"_BlockUntilNextEventMatchingListInModeWithFilter","symbolLocation":72,"imageIndex":5},{"imageOffset":270336,"symbol":"_DPSNextEvent","symbolLocation":844,"imageIndex":6},{"imageOffset":264356,"symbol":"-[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:]","symbolLocation":1332,"imageIndex":6},{"imageOffset":207284,"symbol":"-[NSApplication run]","symbolLocation":596,"imageIndex":6},{"imageOffset":85944,"imageIndex":7},{"imageOffset":625468,"symbol":"QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>)","symbolLocation":500,"imageIndex":8},{"imageOffset":589448,"symbol":"QCoreApplication::exec()","symbolLocation":128,"imageIndex":8},{"imageOffset":2472936,"symbol":"meth_QApplication_exec(_object*, _object*)","symbolLocation":96,"imageIndex":9},{"imageOffset":531920,"symbol":"cfunction_call","symbolLocation":168,"imageIndex":10},{"imageOffset":263628,"symbol":"_PyObject_MakeTpCall","symbolLocation":360,"imageIndex":10},{"imageOffset":1131844,"symbol":"call_function","symbolLocation":512,"imageIndex":10},{"imageOffset":1121880,"symbol":"_PyEval_EvalFrameDefault","symbolLocation":23316,"imageIndex":10},{"imageOffset":265668,"symbol":"function_code_fastcall","symbolLocation":112,"imageIndex":10},{"imageOffset":273756,"symbol":"method_vectorcall","symbolLocation":168,"imageIndex":10},{"imageOffset":1131748,"symbol":"call_function","symbolLocation":416,"imageIndex":10},{"imageOffset":1121880,"symbol":"_PyEval_EvalFrameDefault","symbolLocation":23316,"imageIndex":10},{"imageOffset":1135708,"symbol":"_PyEval_EvalCode","symbolLocation":3072,"imageIndex":10},{"imageOffset":265544,"symbol":"_PyFunction_Vectorcall","symbolLocation":256,"imageIndex":10},{"imageOffset":1131748,"symbol":"call_function","symbolLocation":416,"imageIndex":10},{"imageOffset":1122004,"symbol":"_PyEval_EvalFrameDefault","symbolLocation":23440,"imageIndex":10},{"imageOffset":1135708,"symbol":"_PyEval_EvalCode","symbolLocation":3072,"imageIndex":10},{"imageOffset":1098364,"symbol":"PyEval_EvalCode","symbolLocation":80,"imageIndex":10},{"imageOffset":1085528,"symbol":"builtin_exec","symbolLocation":672,"imageIndex":10},{"imageOffset":529656,"symbol":"cfunction_vectorcall_FASTCALL","symbolLocation":248,"imageIndex":10},{"imageOffset":1131748,"symbol":"call_function","symbolLocation":416,"imageIndex":10},{"imageOffset":1122004,"symbol":"_PyEval_EvalFrameDefault","symbolLocation":23440,"imageIndex":10},{"imageOffset":1135708,"symbol":"_PyEval_EvalCode","symbolLocation":3072,"imageIndex":10},{"imageOffset":265544,"symbol":"_PyFunction_Vectorcall","symbolLocation":256,"imageIndex":10},{"imageOffset":1131748,"symbol":"call_function","symbolLocation":416,"imageIndex":10},{"imageOffset":1122004,"symbol":"_PyEval_EvalFrameDefault","symbolLocation":23440,"imageIndex":10},{"imageOffset":1135708,"symbol":"_PyEval_EvalCode","symbolLocation":3072,"imageIndex":10},{"imageOffset":265544,"symbol":"_PyFunction_Vectorcall","symbolLocation":256,"imageIndex":10},{"imageOffset":1504264,"symbol":"pymain_run_module","symbolLocation":200,"imageIndex":10},{"imageOffset":1501740,"symbol":"Py_RunMain","symbolLocation":744,"imageIndex":10},{"imageOffset":1503928,"symbol":"pymain_main","symbolLocation":340,"imageIndex":10},{"imageOffset":1503576,"symbol":"Py_Main","symbolLocation":36,"imageIndex":10},{"imageOffset":15820,"symbol":"main","symbolLocation":128,"imageIndex":11},{"imageOffset":20724,"symbol":"start","symbolLocation":520,"imageIndex":12}]},{"id":2327280,"frames":[{"imageOffset":20672,"symbol":"__psynch_cvwait","symbolLocation":8,"imageIndex":0},{"imageOffset":30728,"symbol":"_pthread_cond_wait","symbolLocation":1228,"imageIndex":1},{"imageOffset":1478392,"symbol":"blas_thread_server","symbolLocation":360,"imageIndex":13},{"imageOffset":29248,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":1},{"imageOffset":8228,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":2327281,"frames":[{"imageOffset":20672,"symbol":"__psynch_cvwait","symbolLocation":8,"imageIndex":0},{"imageOffset":30728,"symbol":"_pthread_cond_wait","symbolLocation":1228,"imageIndex":1},{"imageOffset":1478392,"symbol":"blas_thread_server","symbolLocation":360,"imageIndex":13},{"imageOffset":29248,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":1},{"imageOffset":8228,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":2327282,"frames":[{"imageOffset":20672,"symbol":"__psynch_cvwait","symbolLocation":8,"imageIndex":0},{"imageOffset":30728,"symbol":"_pthread_cond_wait","symbolLocation":1228,"imageIndex":1},{"imageOffset":1478392,"symbol":"blas_thread_server","symbolLocation":360,"imageIndex":13},{"imageOffset":29248,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":1},{"imageOffset":8228,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":2327283,"frames":[{"imageOffset":20672,"symbol":"__psynch_cvwait","symbolLocation":8,"imageIndex":0},{"imageOffset":30728,"symbol":"_pthread_cond_wait","symbolLocation":1228,"imageIndex":1},{"imageOffset":1478392,"symbol":"blas_thread_server","symbolLocation":360,"imageIndex":13},{"imageOffset":29248,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":1},{"imageOffset":8228,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":2327284,"frames":[{"imageOffset":20672,"symbol":"__psynch_cvwait","symbolLocation":8,"imageIndex":0},{"imageOffset":30728,"symbol":"_pthread_cond_wait","symbolLocation":1228,"imageIndex":1},{"imageOffset":1478392,"symbol":"blas_thread_server","symbolLocation":360,"imageIndex":13},{"imageOffset":29248,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":1},{"imageOffset":8228,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":2327285,"frames":[{"imageOffset":20672,"symbol":"__psynch_cvwait","symbolLocation":8,"imageIndex":0},{"imageOffset":30728,"symbol":"_pthread_cond_wait","symbolLocation":1228,"imageIndex":1},{"imageOffset":1478392,"symbol":"blas_thread_server","symbolLocation":360,"imageIndex":13},{"imageOffset":29248,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":1},{"imageOffset":8228,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":2327286,"frames":[{"imageOffset":20672,"symbol":"__psynch_cvwait","symbolLocation":8,"imageIndex":0},{"imageOffset":30728,"symbol":"_pthread_cond_wait","symbolLocation":1228,"imageIndex":1},{"imageOffset":1478392,"symbol":"blas_thread_server","symbolLocation":360,"imageIndex":13},{"imageOffset":29248,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":1},{"imageOffset":8228,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":2327287,"frames":[{"imageOffset":20672,"symbol":"__psynch_cvwait","symbolLocation":8,"imageIndex":0},{"imageOffset":30728,"symbol":"_pthread_cond_wait","symbolLocation":1228,"imageIndex":1},{"imageOffset":1478392,"symbol":"blas_thread_server","symbolLocation":360,"imageIndex":13},{"imageOffset":29248,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":1},{"imageOffset":8228,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":2327288,"frames":[{"imageOffset":20672,"symbol":"__psynch_cvwait","symbolLocation":8,"imageIndex":0},{"imageOffset":30728,"symbol":"_pthread_cond_wait","symbolLocation":1228,"imageIndex":1},{"imageOffset":1478392,"symbol":"blas_thread_server","symbolLocation":360,"imageIndex":13},{"imageOffset":29248,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":1},{"imageOffset":8228,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":2327291,"frames":[{"imageOffset":8208,"symbol":"start_wqthread","symbolLocation":0,"imageIndex":1}]},{"id":2327292,"frames":[{"imageOffset":8208,"symbol":"start_wqthread","symbolLocation":0,"imageIndex":1}]},{"id":2327298,"frames":[{"imageOffset":8208,"symbol":"start_wqthread","symbolLocation":0,"imageIndex":1}]},{"id":2327319,"name":"ThreadPoolServiceThread","frames":[{"imageOffset":51784,"symbol":"kevent64","symbolLocation":8,"imageIndex":0},{"imageOffset":46053920,"imageIndex":14},{"imageOffset":46053720,"imageIndex":14},{"imageOffset":45613552,"imageIndex":14},{"imageOffset":45392192,"imageIndex":14},{"imageOffset":45756568,"imageIndex":14},{"imageOffset":45663000,"imageIndex":14},{"imageOffset":45756996,"imageIndex":14},{"imageOffset":45914156,"imageIndex":14},{"imageOffset":29248,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":1},{"imageOffset":8228,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":2327320,"name":"ThreadPoolForegroundWorker","frames":[{"imageOffset":6484,"symbol":"mach_msg_trap","symbolLocation":8,"imageIndex":0},{"imageOffset":7424,"symbol":"mach_msg","symbolLocation":76,"imageIndex":0},{"imageOffset":45939984,"imageIndex":14},{"imageOffset":45708880,"imageIndex":14},{"imageOffset":45711536,"imageIndex":14},{"imageOffset":45710600,"imageIndex":14},{"imageOffset":45914156,"imageIndex":14},{"imageOffset":29248,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":1},{"imageOffset":8228,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":2327321,"name":"ThreadPoolBackgroundWorker","frames":[{"imageOffset":6484,"symbol":"mach_msg_trap","symbolLocation":8,"imageIndex":0},{"imageOffset":7424,"symbol":"mach_msg","symbolLocation":76,"imageIndex":0},{"imageOffset":45939984,"imageIndex":14},{"imageOffset":45708880,"imageIndex":14},{"imageOffset":45710956,"imageIndex":14},{"imageOffset":45710468,"imageIndex":14},{"imageOffset":45914156,"imageIndex":14},{"imageOffset":29248,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":1},{"imageOffset":8228,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":2327322,"name":"Chrome_IOThread","frames":[{"imageOffset":51784,"symbol":"kevent64","symbolLocation":8,"imageIndex":0},{"imageOffset":46053920,"imageIndex":14},{"imageOffset":46053720,"imageIndex":14},{"imageOffset":45613552,"imageIndex":14},{"imageOffset":45392192,"imageIndex":14},{"imageOffset":45756568,"imageIndex":14},{"imageOffset":114353932,"imageIndex":14},{"imageOffset":45756996,"imageIndex":14},{"imageOffset":45914156,"imageIndex":14},{"imageOffset":29248,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":1},{"imageOffset":8228,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":2327323,"name":"NetworkConfigWatcher","frames":[{"imageOffset":6484,"symbol":"mach_msg_trap","symbolLocation":8,"imageIndex":0},{"imageOffset":7424,"symbol":"mach_msg","symbolLocation":76,"imageIndex":0},{"imageOffset":45939984,"imageIndex":14},{"imageOffset":45939448,"imageIndex":14},{"imageOffset":45211096,"imageIndex":14},{"imageOffset":45613552,"imageIndex":14},{"imageOffset":45392192,"imageIndex":14},{"imageOffset":45756568,"imageIndex":14},{"imageOffset":45756996,"imageIndex":14},{"imageOffset":45914156,"imageIndex":14},{"imageOffset":29248,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":1},{"imageOffset":8228,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":2327324,"name":"ThreadPoolForegroundWorker","frames":[{"imageOffset":6484,"symbol":"mach_msg_trap","symbolLocation":8,"imageIndex":0},{"imageOffset":7424,"symbol":"mach_msg","symbolLocation":76,"imageIndex":0},{"imageOffset":45939984,"imageIndex":14},{"imageOffset":45708880,"imageIndex":14},{"imageOffset":45711536,"imageIndex":14},{"imageOffset":45710600,"imageIndex":14},{"imageOffset":45914156,"imageIndex":14},{"imageOffset":29248,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":1},{"imageOffset":8228,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":2327325,"name":"ThreadPoolForegroundWorker","frames":[{"imageOffset":6484,"symbol":"mach_msg_trap","symbolLocation":8,"imageIndex":0},{"imageOffset":7424,"symbol":"mach_msg","symbolLocation":76,"imageIndex":0},{"imageOffset":45939984,"imageIndex":14},{"imageOffset":45708880,"imageIndex":14},{"imageOffset":45711536,"imageIndex":14},{"imageOffset":45710600,"imageIndex":14},{"imageOffset":45914156,"imageIndex":14},{"imageOffset":29248,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":1},{"imageOffset":8228,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":2327326,"name":"ThreadPoolForegroundWorker","frames":[{"imageOffset":6484,"symbol":"mach_msg_trap","symbolLocation":8,"imageIndex":0},{"imageOffset":7424,"symbol":"mach_msg","symbolLocation":76,"imageIndex":0},{"imageOffset":45939984,"imageIndex":14},{"imageOffset":45708880,"imageIndex":14},{"imageOffset":45710956,"imageIndex":14},{"imageOffset":45710600,"imageIndex":14},{"imageOffset":45914156,"imageIndex":14},{"imageOffset":29248,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":1},{"imageOffset":8228,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":2327327,"name":"CompositorTileWorker1","frames":[{"imageOffset":20672,"symbol":"__psynch_cvwait","symbolLocation":8,"imageIndex":0},{"imageOffset":30728,"symbol":"_pthread_cond_wait","symbolLocation":1228,"imageIndex":1},{"imageOffset":45908896,"imageIndex":14},{"imageOffset":72249160,"imageIndex":14},{"imageOffset":45914156,"imageIndex":14},{"imageOffset":29248,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":1},{"imageOffset":8228,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":2327328,"name":"Chrome_InProcGpuThread","frames":[{"imageOffset":6484,"symbol":"mach_msg_trap","symbolLocation":8,"imageIndex":0},{"imageOffset":7424,"symbol":"mach_msg","symbolLocation":76,"imageIndex":0},{"imageOffset":45939984,"imageIndex":14},{"imageOffset":45939448,"imageIndex":14},{"imageOffset":45211096,"imageIndex":14},{"imageOffset":45613552,"imageIndex":14},{"imageOffset":45392192,"imageIndex":14},{"imageOffset":45756568,"imageIndex":14},{"imageOffset":45756996,"imageIndex":14},{"imageOffset":45914156,"imageIndex":14},{"imageOffset":29248,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":1},{"imageOffset":8228,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":2327329,"name":"Chrome_ChildIOThread","frames":[{"imageOffset":51784,"symbol":"kevent64","symbolLocation":8,"imageIndex":0},{"imageOffset":46053920,"imageIndex":14},{"imageOffset":46053720,"imageIndex":14},{"imageOffset":45613552,"imageIndex":14},{"imageOffset":45392192,"imageIndex":14},{"imageOffset":45756568,"imageIndex":14},{"imageOffset":45756996,"imageIndex":14},{"imageOffset":45914156,"imageIndex":14},{"imageOffset":29248,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":1},{"imageOffset":8228,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":2327330,"name":"NetworkConfigWatcher","frames":[{"imageOffset":6484,"symbol":"mach_msg_trap","symbolLocation":8,"imageIndex":0},{"imageOffset":7424,"symbol":"mach_msg","symbolLocation":76,"imageIndex":0},{"imageOffset":45939984,"imageIndex":14},{"imageOffset":45939448,"imageIndex":14},{"imageOffset":45211096,"imageIndex":14},{"imageOffset":45613552,"imageIndex":14},{"imageOffset":45392192,"imageIndex":14},{"imageOffset":45756568,"imageIndex":14},{"imageOffset":45756996,"imageIndex":14},{"imageOffset":45914156,"imageIndex":14},{"imageOffset":29248,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":1},{"imageOffset":8228,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":2327332,"name":"VizCompositorThread","frames":[{"imageOffset":6484,"symbol":"mach_msg_trap","symbolLocation":8,"imageIndex":0},{"imageOffset":7424,"symbol":"mach_msg","symbolLocation":76,"imageIndex":0},{"imageOffset":45939984,"imageIndex":14},{"imageOffset":45939448,"imageIndex":14},{"imageOffset":45211096,"imageIndex":14},{"imageOffset":45613552,"imageIndex":14},{"imageOffset":45392192,"imageIndex":14},{"imageOffset":45756568,"imageIndex":14},{"imageOffset":45756996,"imageIndex":14},{"imageOffset":45914156,"imageIndex":14},{"imageOffset":29248,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":1},{"imageOffset":8228,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":2327340,"name":"NetworkService","frames":[{"imageOffset":51784,"symbol":"kevent64","symbolLocation":8,"imageIndex":0},{"imageOffset":46053920,"imageIndex":14},{"imageOffset":46053720,"imageIndex":14},{"imageOffset":45613552,"imageIndex":14},{"imageOffset":45392192,"imageIndex":14},{"imageOffset":45756568,"imageIndex":14},{"imageOffset":45756996,"imageIndex":14},{"imageOffset":45914156,"imageIndex":14},{"imageOffset":29248,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":1},{"imageOffset":8228,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":2327341,"name":"NetworkConfigWatcher","frames":[{"imageOffset":6484,"symbol":"mach_msg_trap","symbolLocation":8,"imageIndex":0},{"imageOffset":7424,"symbol":"mach_msg","symbolLocation":76,"imageIndex":0},{"imageOffset":45939984,"imageIndex":14},{"imageOffset":45939448,"imageIndex":14},{"imageOffset":45211096,"imageIndex":14},{"imageOffset":45613552,"imageIndex":14},{"imageOffset":45392192,"imageIndex":14},{"imageOffset":45756568,"imageIndex":14},{"imageOffset":45756996,"imageIndex":14},{"imageOffset":45914156,"imageIndex":14},{"imageOffset":29248,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":1},{"imageOffset":8228,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":2327344,"name":"ThreadPoolSingleThreadForegroundBlocking0","frames":[{"imageOffset":6484,"symbol":"mach_msg_trap","symbolLocation":8,"imageIndex":0},{"imageOffset":7424,"symbol":"mach_msg","symbolLocation":76,"imageIndex":0},{"imageOffset":45939984,"imageIndex":14},{"imageOffset":45939448,"imageIndex":14},{"imageOffset":45708864,"imageIndex":14},{"imageOffset":45711536,"imageIndex":14},{"imageOffset":45710688,"imageIndex":14},{"imageOffset":45914156,"imageIndex":14},{"imageOffset":29248,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":1},{"imageOffset":8228,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":2327360,"name":"Thread (pooled)","frames":[{"imageOffset":20672,"symbol":"__psynch_cvwait","symbolLocation":8,"imageIndex":0},{"imageOffset":30728,"symbol":"_pthread_cond_wait","symbolLocation":1228,"imageIndex":1},{"imageOffset":2062168,"imageIndex":8},{"imageOffset":2061328,"imageIndex":8},{"imageOffset":2061136,"symbol":"QWaitCondition::wait(QMutex*, QDeadlineTimer)","symbolLocation":108,"imageIndex":8},{"imageOffset":2038864,"imageIndex":8},{"imageOffset":2018532,"imageIndex":8},{"imageOffset":29248,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":1},{"imageOffset":8228,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":2327361,"name":"Thread (pooled)","frames":[{"imageOffset":20672,"symbol":"__psynch_cvwait","symbolLocation":8,"imageIndex":0},{"imageOffset":30728,"symbol":"_pthread_cond_wait","symbolLocation":1228,"imageIndex":1},{"imageOffset":2062168,"imageIndex":8},{"imageOffset":2061328,"imageIndex":8},{"imageOffset":2061136,"symbol":"QWaitCondition::wait(QMutex*, QDeadlineTimer)","symbolLocation":108,"imageIndex":8},{"imageOffset":2038864,"imageIndex":8},{"imageOffset":2018532,"imageIndex":8},{"imageOffset":29248,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":1},{"imageOffset":8228,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":2327362,"name":"Thread (pooled)","frames":[{"imageOffset":20672,"symbol":"__psynch_cvwait","symbolLocation":8,"imageIndex":0},{"imageOffset":30728,"symbol":"_pthread_cond_wait","symbolLocation":1228,"imageIndex":1},{"imageOffset":2062168,"imageIndex":8},{"imageOffset":2061328,"imageIndex":8},{"imageOffset":2061136,"symbol":"QWaitCondition::wait(QMutex*, QDeadlineTimer)","symbolLocation":108,"imageIndex":8},{"imageOffset":2038864,"imageIndex":8},{"imageOffset":2018532,"imageIndex":8},{"imageOffset":29248,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":1},{"imageOffset":8228,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":2327363,"name":"Thread (pooled)","frames":[{"imageOffset":20672,"symbol":"__psynch_cvwait","symbolLocation":8,"imageIndex":0},{"imageOffset":30728,"symbol":"_pthread_cond_wait","symbolLocation":1228,"imageIndex":1},{"imageOffset":2062168,"imageIndex":8},{"imageOffset":2061328,"imageIndex":8},{"imageOffset":2061136,"symbol":"QWaitCondition::wait(QMutex*, QDeadlineTimer)","symbolLocation":108,"imageIndex":8},{"imageOffset":2038864,"imageIndex":8},{"imageOffset":2018532,"imageIndex":8},{"imageOffset":29248,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":1},{"imageOffset":8228,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":2327376,"name":"NetworkConfigWatcher","frames":[{"imageOffset":6484,"symbol":"mach_msg_trap","symbolLocation":8,"imageIndex":0},{"imageOffset":7424,"symbol":"mach_msg","symbolLocation":76,"imageIndex":0},{"imageOffset":45939984,"imageIndex":14},{"imageOffset":45939448,"imageIndex":14},{"imageOffset":45211096,"imageIndex":14},{"imageOffset":45613552,"imageIndex":14},{"imageOffset":45392192,"imageIndex":14},{"imageOffset":45756568,"imageIndex":14},{"imageOffset":45756996,"imageIndex":14},{"imageOffset":45914156,"imageIndex":14},{"imageOffset":29248,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":1},{"imageOffset":8228,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":2327377,"frames":[{"imageOffset":8208,"symbol":"start_wqthread","symbolLocation":0,"imageIndex":1}]},{"id":2327384,"frames":[{"imageOffset":8208,"symbol":"start_wqthread","symbolLocation":0,"imageIndex":1}]},{"id":2327385,"frames":[{"imageOffset":8208,"symbol":"start_wqthread","symbolLocation":0,"imageIndex":1}]},{"id":2327386,"frames":[{"imageOffset":8208,"symbol":"start_wqthread","symbolLocation":0,"imageIndex":1}]},{"id":2327388,"name":"com.apple.NSEventThread","frames":[{"imageOffset":6484,"symbol":"mach_msg_trap","symbolLocation":8,"imageIndex":0},{"imageOffset":7424,"symbol":"mach_msg","symbolLocation":76,"imageIndex":0},{"imageOffset":544472,"symbol":"__CFRunLoopServiceMachPort","symbolLocation":372,"imageIndex":4},{"imageOffset":537488,"symbol":"__CFRunLoopRun","symbolLocation":1212,"imageIndex":4},{"imageOffset":534324,"symbol":"CFRunLoopRunSpecific","symbolLocation":600,"imageIndex":4},{"imageOffset":1765296,"symbol":"_NSEventThread","symbolLocation":196,"imageIndex":6},{"imageOffset":29248,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":1},{"imageOffset":8228,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":2327409,"name":"MemoryInfra","frames":[{"imageOffset":6484,"symbol":"mach_msg_trap","symbolLocation":8,"imageIndex":0},{"imageOffset":7424,"symbol":"mach_msg","symbolLocation":76,"imageIndex":0},{"imageOffset":45939984,"imageIndex":14},{"imageOffset":45939448,"imageIndex":14},{"imageOffset":45211096,"imageIndex":14},{"imageOffset":45613552,"imageIndex":14},{"imageOffset":45392192,"imageIndex":14},{"imageOffset":45756568,"imageIndex":14},{"imageOffset":45756996,"imageIndex":14},{"imageOffset":45914156,"imageIndex":14},{"imageOffset":29248,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":1},{"imageOffset":8228,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":2327410,"name":"ThreadPoolSingleThreadSharedBackgroundBlocking1","frames":[{"imageOffset":6484,"symbol":"mach_msg_trap","symbolLocation":8,"imageIndex":0},{"imageOffset":7424,"symbol":"mach_msg","symbolLocation":76,"imageIndex":0},{"imageOffset":45939984,"imageIndex":14},{"imageOffset":45939448,"imageIndex":14},{"imageOffset":45708864,"imageIndex":14},{"imageOffset":45710956,"imageIndex":14},{"imageOffset":45710512,"imageIndex":14},{"imageOffset":45914156,"imageIndex":14},{"imageOffset":29248,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":1},{"imageOffset":8228,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]}],
  "usedImages" : [
  {
    "source" : "P",
    "arch" : "arm64e",
    "base" : 7266631680,
    "size" : 221184,
    "uuid" : "384945e6-dd71-37e5-9a3d-84fff14a1e60",
    "path" : "\/usr\/lib\/system\/libsystem_kernel.dylib",
    "name" : "libsystem_kernel.dylib"
  },
  {
    "source" : "P",
    "arch" : "arm64e",
    "base" : 7266852864,
    "size" : 53248,
    "uuid" : "f7b2eccf-e6f1-3109-ae81-9028c0b8332a",
    "path" : "\/usr\/lib\/system\/libsystem_pthread.dylib",
    "name" : "libsystem_pthread.dylib"
  },
  {
    "source" : "P",
    "arch" : "arm64e",
    "base" : 7265587200,
    "size" : 528384,
    "uuid" : "0dbc8b95-0037-3725-a769-0c772c293488",
    "path" : "\/usr\/lib\/system\/libsystem_c.dylib",
    "name" : "libsystem_c.dylib"
  },
  {
    "source" : "P",
    "arch" : "arm64e",
    "base" : 7266959360,
    "size" : 32768,
    "uuid" : "49cf1536-27e5-3a34-9724-d75552cbab56",
    "path" : "\/usr\/lib\/system\/libsystem_platform.dylib",
    "name" : "libsystem_platform.dylib"
  },
  {
    "source" : "P",
    "arch" : "arm64e",
    "base" : 7267172352,
    "CFBundleShortVersionString" : "6.9",
    "CFBundleIdentifier" : "com.apple.CoreFoundation",
    "size" : 5521408,
    "uuid" : "35473de6-c433-332c-aee0-013fd5f6d4fd",
    "path" : "\/System\/Library\/Frameworks\/CoreFoundation.framework\/Versions\/A\/CoreFoundation",
    "name" : "CoreFoundation",
    "CFBundleVersion" : "1856.107"
  },
  {
    "source" : "P",
    "arch" : "arm64e",
    "base" : 7413874688,
    "CFBundleShortVersionString" : "2.1.1",
    "CFBundleIdentifier" : "com.apple.HIToolbox",
    "size" : 3342336,
    "uuid" : "b5a3fe9a-833b-3697-ac9c-1e9e8eb11bac",
    "path" : "\/System\/Library\/Frameworks\/Carbon.framework\/Versions\/A\/Frameworks\/HIToolbox.framework\/Versions\/A\/HIToolbox",
    "name" : "HIToolbox"
  },
  {
    "source" : "P",
    "arch" : "arm64e",
    "base" : 7312879616,
    "CFBundleShortVersionString" : "6.9",
    "CFBundleIdentifier" : "com.apple.AppKit",
    "size" : 15429632,
    "uuid" : "8701760d-31b6-37eb-be77-ffb39921dd22",
    "path" : "\/System\/Library\/Frameworks\/AppKit.framework\/Versions\/C\/AppKit",
    "name" : "AppKit",
    "CFBundleVersion" : "2113.30.116"
  },
  {
    "source" : "P",
    "arch" : "arm64",
    "base" : 4838752256,
    "size" : 606208,
    "uuid" : "bfcf26c7-0cc9-3ee3-a488-8647073e4fda",
    "path" : "\/Users\/USER\/*\/ChimeraX.app\/Contents\/Library\/Frameworks\/Python.framework\/Versions\/3.9\/lib\/python3.9\/site-packages\/PyQt6\/Qt6\/plugins\/platforms\/libqcocoa.dylib",
    "name" : "libqcocoa.dylib"
  },
  {
    "source" : "P",
    "arch" : "arm64",
    "base" : 4781948928,
    "size" : 4489216,
    "uuid" : "8e087af8-99fe-368f-a2f5-8cac45da755d",
    "path" : "\/Users\/USER\/*\/ChimeraX.app\/Contents\/Library\/Frameworks\/Python.framework\/Versions\/3.9\/lib\/python3.9\/site-packages\/PyQt6\/Qt6\/lib\/QtCore.framework\/Versions\/A\/QtCore",
    "name" : "QtCore"
  },
  {
    "source" : "P",
    "arch" : "arm64",
    "base" : 4829659136,
    "size" : 3014656,
    "uuid" : "cb6bf878-5499-3497-a87c-76b83c9156d6",
    "path" : "\/Users\/USER\/*\/ChimeraX.app\/Contents\/Library\/Frameworks\/Python.framework\/Versions\/3.9\/lib\/python3.9\/site-packages\/PyQt6\/QtWidgets.abi3.so",
    "name" : "QtWidgets.abi3.so"
  },
  {
    "source" : "P",
    "arch" : "arm64",
    "base" : 4388192256,
    "CFBundleShortVersionString" : "3.9.6, (c) 2001-2019 Python Software Foundation.",
    "CFBundleIdentifier" : "org.python.python",
    "size" : 2523136,
    "uuid" : "1d0528e1-f5ed-3747-904f-70bf63e4e283",
    "path" : "\/Users\/USER\/*\/ChimeraX.app\/Contents\/Library\/Frameworks\/Python.framework\/Versions\/3.9\/Python",
    "name" : "Python",
    "CFBundleVersion" : "3.9.6"
  },
  {
    "source" : "P",
    "arch" : "arm64",
    "base" : 4376772608,
    "CFBundleShortVersionString" : "1.4.0",
    "CFBundleIdentifier" : "edu.ucsf.cgl.ChimeraX",
    "size" : 16384,
    "uuid" : "14d0717f-ca24-3ba7-b277-d7edabf09fb5",
    "path" : "\/Users\/USER\/*\/ChimeraX.app\/Contents\/MacOS\/ChimeraX",
    "name" : "ChimeraX",
    "CFBundleVersion" : "1.4.0.0"
  },
  {
    "source" : "P",
    "arch" : "arm64e",
    "base" : 4379820032,
    "size" : 393216,
    "uuid" : "d21a73ea-79cd-36eb-8ac9-2c5cf5181a27",
    "path" : "\/usr\/lib\/dyld",
    "name" : "dyld"
  },
  {
    "source" : "P",
    "arch" : "arm64",
    "base" : 4420288512,
    "size" : 19169280,
    "uuid" : "0672674f-0fbf-3245-8fec-358e42c77be2",
    "path" : "\/Users\/USER\/*\/ChimeraX.app\/Contents\/Library\/Frameworks\/Python.framework\/Versions\/3.9\/lib\/python3.9\/site-packages\/numpy\/.dylibs\/libopenblas64_.0.dylib",
    "name" : "libopenblas64_.0.dylib"
  },
  {
    "source" : "P",
    "arch" : "arm64",
    "base" : 6242107392,
    "size" : 136691712,
    "uuid" : "cfa5ae29-512c-39df-a082-53b32ac7d003",
    "path" : "\/Users\/USER\/*\/ChimeraX.app\/Contents\/Library\/Frameworks\/Python.framework\/Versions\/3.9\/lib\/python3.9\/site-packages\/PyQt6\/Qt6\/lib\/QtWebEngineCore.framework\/Versions\/A\/QtWebEngineCore",
    "name" : "QtWebEngineCore"
  }
],
  "sharedCache" : {
  "base" : 7263682560,
  "size" : 3091218432,
  "uuid" : "296eb28e-6aeb-3129-8fa6-feb92261a4eb"
},
  "vmSummary" : "ReadOnly portion of Libraries: Total=1.2G resident=0K(0%) swapped_out_or_unallocated=1.2G(100%)\nWritable regions: Total=1.9G written=0K(0%) resident=0K(0%) swapped_out=0K(0%) unallocated=1.9G(100%)\n\n                                VIRTUAL   REGION \nREGION TYPE                        SIZE    COUNT (non-coalesced) \n===========                     =======  ======= \nAccelerate framework               384K        3 \nActivity Tracing                   256K        1 \nCG backing stores                 4032K        4 \nCG image                            96K        3 \nColorSync                          608K       26 \nCoreAnimation                      208K       12 \nCoreGraphics                        32K        2 \nCoreUI image data                 2576K       16 \nFoundation                          16K        1 \nKernel Alloc Once                   32K        1 \nMALLOC                           333.5M       67 \nMALLOC guard page                  192K        9 \nMALLOC_MEDIUM (reserved)         688.0M        6         reserved VM address space (unallocated)\nMALLOC_NANO (reserved)           384.0M        1         reserved VM address space (unallocated)\nMach message                        64K        2 \nOpenGL GLSL                        384K        4 \nSTACK GUARD                        640K       40 \nStack                            171.4M       41 \nStack Guard                       56.0M        1 \nVM_ALLOCATE                      137.7M      205 \nVM_ALLOCATE (reserved)           224.0M        1         reserved VM address space (unallocated)\n__AUTH                            2570K      308 \n__AUTH_CONST                      19.7M      499 \n__DATA                            23.5M      602 \n__DATA_CONST                      25.9M      614 \n__DATA_DIRTY                      1787K      215 \n__FONT_DATA                          4K        1 \n__GLSLBUILTINS                    5176K        1 \n__LINKEDIT                       599.4M      114 \n__OBJC_CONST                      3569K      273 \n__OBJC_RO                         82.1M        1 \n__OBJC_RW                         3104K        1 \n__TEXT                           676.6M      632 \n__UNICODE                          588K        1 \ndyld private memory               1184K        3 \nmapped file                      180.7M       45 \nshared memory                     3200K       26 \n===========                     =======  ======= \nTOTAL                              3.5G     3782 \nTOTAL, minus reserved VM space     2.3G     3782 \n",
  "legacyInfo" : {
  "threadTriggered" : {
    "name" : "CrBrowserMain",
    "queue" : "com.apple.main-thread"
  }
},
  "trialInfo" : {
  "rollouts" : [
    {
      "rolloutId" : "601d9415f79519000ccd4b69",
      "factorPackIds" : {
        "SIRI_TEXT_TO_SPEECH" : "620161cb295c182621eced20"
      },
      "deploymentId" : 240000392
    },
    {
      "rolloutId" : "607844aa04477260f58a8077",
      "factorPackIds" : {
        "SIRI_MORPHUN_ASSETS" : "6103050cbfe6dc472e1c982a"
      },
      "deploymentId" : 240000066
    },
    {
      "rolloutId" : "602ad4dac86151000cf27e46",
      "factorPackIds" : {
        "SIRI_DICTATION_ASSETS" : "61fb0e87c773c43cde3bb80e"
      },
      "deploymentId" : 240000305
    },
    {
      "rolloutId" : "60da5e84ab0ca017dace9abf",
      "factorPackIds" : {

      },
      "deploymentId" : 240000008
    },
    {
      "rolloutId" : "5fc94383418129005b4e9ae0",
      "factorPackIds" : {

      },
      "deploymentId" : 240000252
    },
    {
      "rolloutId" : "5ffde50ce2aacd000d47a95f",
      "factorPackIds" : {

      },
      "deploymentId" : 240000115
    }
  ],
  "experiments" : [

  ]
}
}

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

That is great progress.  Most users won't use imagecodecs (reading TIFF image data), netcdf4 (reading MD trajectories?) or PyTables (reading and writing HDF5 files).  But I agree we should get those working on M1 before making it a daily build.  But it would probably be ok making it a Tech Preview build.  Will need to figure out what machine to use for builds.  I think all our M1 CPUs are laptops and the mac mini.  Maybe we should move the Mac Mini to work and use that for builds.  I don't think we should cross-compile (ie build M1 ChimeraX on an Intel machine), more trouble than it is worth.


comment:25 by Zach Pearson, 4 years ago

I neglected to mention I had not tried compiling OpenMM 7.6 or Ambertools 20; if you have a similar opinion about those prereqs then I'm OK with a techpreview build currently, if not I will work on those Makefiles ASAP.

comment:26 by Zach Pearson, 4 years ago

Apologies about the ambiguous wording of "just those three packages excluded", would have been better to say "just those 3 pip packages".

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

Yes.  Good to have a list of everything that is missing.  So Ambertools and OpenMM.  Still most users would not notice the 5 missing packages.  Still think it would be fine as a techpreview, but not as a daily build.  It is going to be painful to build those packages and you would be doing a bigger service to the community if you could get the maintainers to release an M1 version of those packages.  Might not be possible for any of them, but worth trying.

comment:28 by Zach Pearson, 4 years ago

I'm definitely inclined to agree. In OpenMM's case they have an arm64 build on conda in version 7.7, and in ambertools's case Ambertools21 is supposed to support M1 and its mailing list archives would indicate it has been active with people reporting issues and coming up with workarounds. Famous last words, knock on wood, crossing my fingers: hopefully it won't be too needlessly complicated.

comment:29 by pett, 4 years ago

Yes, great progress! If we make it a Tech Preview build, we would definitely want to put in the Notes section the functions that we know will not work, so that we don't get a bunch of spurious bug reports about then from people believing they're helping us. Might even want to put a warning in the log at startup, just so they don't have to refer back to the download page when they encounter a problem.

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

Might even go further, and in a tech preview raise a UserError if any of the missing modules are imported saying they are not yet available for Mac M1 CPU which will prevent the report a bug button from appearing.

comment:31 by Zach Pearson, 4 years ago

Yes, that's a good idea, and I think I'll implement that. The experience of putting those kinds of warnings in would be very helpful for PyPi packaging which will run into the same kinds of heterogeneous environments.

comment:32 by Zach Pearson, 4 years ago

Tristan made an OpenMM 7.7.0 build for Linux. I'll be using it to update OpenMM in ChimeraX.

in reply to:  33 ; comment:33 by Tristan Croll, 4 years ago

Will you be putting OpenMM 7.7 into the standard daily builds as well?
________________________________
From: ChimeraX <ChimeraX-bugs-admin@cgl.ucsf.edu>
Sent: 07 March 2022 17:44
Cc: goddard@cgl.ucsf.edu <goddard@cgl.ucsf.edu>; pett@cgl.ucsf.edu <pett@cgl.ucsf.edu>; Tristan Croll <tic20@cam.ac.uk>; zjp@cgl.ucsf.edu <zjp@cgl.ucsf.edu>
Subject: Re: [ChimeraX] #4663: Make native Apple M1 CPU distribution

#4663: Make native Apple M1 CPU distribution
----------------------------------+--------------------------
          Reporter:  Tom Goddard  |      Owner:  Zach Pearson
              Type:  enhancement  |     Status:  assigned
          Priority:  moderate     |  Milestone:
         Component:  Platform     |    Version:
        Resolution:               |   Keywords:
        Blocked By:               |   Blocking:
Notify when closed:               |   Platform:  all
           Project:  ChimeraX     |
----------------------------------+--------------------------

Comment (by Zach Pearson):

 Tristan made an OpenMM 7.7.0 build for Linux. I'll be using it to update
 OpenMM in ChimeraX.

--
Ticket URL: <https://www.rbvi.ucsf.edu/trac/ChimeraX/ticket/4663#comment:32>
ChimeraX <https://www.rbvi.ucsf.edu/chimerax/>
ChimeraX Issue Tracker

comment:34 by Zach Pearson, 4 years ago

Yes, I haven't made the update yet as I've been trying to wrap my head around what to do for Windows. It looks like most of the problems with OpenMM are caused by ABI incompatibilities on Linux, but I've been convincing myself it's safe to update the Windows and macOS versions. We specify a CUDA version that's not present in the filenames on OpenMM's conda repo, and I don't think they pin CUDA in their package.

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

We get OpenMM binaries for Mac and Windows from Anaconda

	https://anaconda.org/conda-forge/openmm/files <https://anaconda.org/conda-forge/openmm/files>

as described in ChimeraX source file

	chimerax/prereqs/openmm/README.txt

The Mac and Windows version are for specific CUDA versions.  You can see the CUDA version by clicking on the “i” icon in the distribution table since that info is not in the Anaconda file name.  See the attached image for what the anaconda table looks like.  The “I” icon is immediately to the left of each file name.

Added by email2trac

by goddard@…, 4 years ago

Attachment: anaconda.png added

Added by email2trac

comment:36 by Zach Pearson, 4 years ago

😅 What a discoverable feature that is...

Thank you!

in reply to:  38 comment:37 by Tristan Croll, 4 years ago

They used to specify the CUDA version(s) they built against in the file names, but not any more - to find out what they'd used for 7.7 I had to expand the tarball and ldd​ OpenMMCudaCompiler.so (they built against CUDA 11.2). It's not actually strictly necessary for the user to have that specific CUDA version installed - although it does help a little with startup performance. OpenMM works out what's available at runtime and adjusts accordingly. ​
________________________________
From: ChimeraX <ChimeraX-bugs-admin@cgl.ucsf.edu>
Sent: 09 March 2022 19:12
To: goddard@cgl.ucsf.edu <goddard@cgl.ucsf.edu>; zjp@cgl.ucsf.edu <zjp@cgl.ucsf.edu>
Cc: pett@cgl.ucsf.edu <pett@cgl.ucsf.edu>; Tristan Croll <tic20@cam.ac.uk>
Subject: Re: [ChimeraX] #4663: Make native Apple M1 CPU distribution

#4663: Make native Apple M1 CPU distribution
----------------------------------+--------------------------
          Reporter:  Tom Goddard  |      Owner:  Zach Pearson
              Type:  enhancement  |     Status:  assigned
          Priority:  moderate     |  Milestone:
         Component:  Platform     |    Version:
        Resolution:               |   Keywords:
        Blocked By:               |   Blocking:
Notify when closed:               |   Platform:  all
           Project:  ChimeraX     |
----------------------------------+--------------------------

Comment (by goddard@…):

 {{{
 We get OpenMM binaries for Mac and Windows from Anaconda

         https://anaconda.org/conda-forge/openmm/files
 <https://anaconda.org/conda-forge/openmm/files>

 as described in ChimeraX source file

         chimerax/prereqs/openmm/README.txt

 The Mac and Windows version are for specific CUDA versions.  You can see
 the CUDA version by clicking on the “i” icon in the distribution table
 since that info is not in the Anaconda file name.  See the attached image
 for what the anaconda table looks like.  The “I” icon is immediately to
 the left of each file name.
 }}}

 [[Image(anaconda.png)]]

--
Ticket URL: <https://www.rbvi.ucsf.edu/trac/ChimeraX/ticket/4663#comment:35>
ChimeraX <https://www.rbvi.ucsf.edu/chimerax/>
ChimeraX Issue Tracker

comment:38 by Tristan Croll, 4 years ago

Ah! Now I see it *does* specify the CUDA version in the popup after clicking "i" - I did do that, but must have been suffering from selective blindness at the time...

comment:39 by Zach Pearson, 4 years ago

https://github.com/PyTables/PyTables/pull/944 Tables may be getting close to an M1 build.

comment:40 by Tom Goddard, 4 years ago

I added OpenMM 7.7.0 for Mac M1 to the build taken from conda-forge. Other platforms are still using OpenMM 7.6.0.

comment:41 by Tom Goddard, 4 years ago

I added Intel AmberTools to the Mac M1 distribution and tested and it works. This works because AmberTools is called using subprocesses so they run using Rosetta emulation. The same is true for ffmpeg encoding movies. I tested AmberTools on an M1 ChimeraX for showing an electrostatic surface (on AMP, PubChem 66083) and it worked.

comment:42 by Zach Pearson, 4 years ago

I converted the Conda tarball versions of netCDF4-1.5.8, imagecodecs-2022.2.22, and tables-3.7.0 -- all of which are available on arm64 macOS -- into wheels and uploaded them to the ChimeraX pre-reqs repo. I'll update our Makefiles to ensure that they install on M1 machines and then work on setting up the M1 mac Mini as a build machine. Then, we can move this project into the bugfixing stage.

comment:43 by Zach Pearson, 3 years ago

After installing tables and netcdf4 to a developer build I discovered that some dynamic libraries were missing. They were not included in the Anaconda tarballs, so I retrieved them from /opt/homebrew/ and uploaded them to the prerequisites archive on plato, changing the extensions from .dylib to .dylib.arm64 to make it clear which platform they are for. I'll ensure correct rpath/runpath values and that the libraries are placed in the right spot.

Version 0, edited 3 years ago by Zach Pearson (next)

comment:44 by Zach Pearson, 3 years ago

Changes not needed because the tables search path looks first in the local Python before expanding search to /usr/lib. netcdf4's search path is pretty polluted with paths that look like they're from CI runs, however.

This commit installs the packages. Not closing this ticket because it's about making a distribution.

comment:45 by Tom Goddard, 3 years ago

Should not use homebrew libraries. Anaconda distributes all the needed libraries and those should be used. For instance Anaconda distributes hdf5 libraries needed by pytables

https://anaconda.org/conda-forge/hdf5/files

comment:46 by Tom Goddard, 3 years ago

Cc: Greg Couch added
Milestone: 1.4

Will try to distribute 1.4 native M1 build.

comment:47 by Tom Goddard, 3 years ago

Will need to see if universal distribution including both Intel and Arm64 is reasonable size. This would be simpler for users than separate Intel and Arm64 builds. The download page will not be able to identify M1 Macs because Safari on M1 Mac claims to be for Intel (although it is a native M1 app). So users would have to know what kind of CPU they have.

comment:48 by Zach Pearson, 3 years ago

So far: netcdf4, pytables, and imagecodecs were all sourced from Anaconda, but netcdf4 and pytables relied on arm64 dylibs that weren't bundled with the packages that need them. I tried using homebrew libraries, but Tom pointed out that they may not be ABI compatible, so on his suggestion we used libraries from Anaconda instead. Downloading the tarballs for the libraries and copying them over resulted in an unsigned code error, so I made an anaconda environment on my machine where I could install the packages directly from anaconda using its package manager. After copying those libs over, the errors went away, meaning we now have a testable candidate for an official M1 build of ChimeraX.

We are probably going to make a universal build, but as Tom noted in an email to me:

the Mac universal build [will] probably [require a lot of things to be] work[ed] out[:] [c]an we combine an old Intel macOS 10.14 support with new M1 macOS 11+ support?  Is notarization going to lead to new problems on M1? Can we build the Intel version on the M1 Mac Mini? ...

So I'm opening a new ticket for that effort blocking this one. Tom suggests testing the M1 build as a daily build offering when it's complete. I agree.

I think we should try to get an M1 compatible 1.4 build though, so my suggestion is to branch the 1.4 codebase twice: one release candidate branch, one M1 branch. We'll use the M1 branch sparingly, only cherry picking commits from develop which directly deal with M1 compatibility issues, so we can ensure that build is compatible with the other 1.4 builds.

comment:49 by Zach Pearson, 3 years ago

Blocked By: 6778

comment:50 by Zach Pearson, 3 years ago

Milestone: 1.41.5

Changing the milestone to 1.5 because we're going to either silently replace the macOS 1.4 download with a universal download or release a 1.5 download, but in either case 1.4 will come out without this ticket.

comment:51 by Tom Goddard, 3 years ago

On May 10, 2022, at 12:09 PM, Zach Pearson wrote:

Hi all,

I was testing building ChimeraX on Essex (macOS 10.14, Mojave) and found that I could not cross-compile arm64 code. It is using Xcode 10.3, but cross-compilation was introduced in 12.2 which requires at least macOS 10.15.4, Catalina.

We can certainly test a universal build on macOS 10.14, but to build it we need either a Catalina machine or the M1 Mac. In the event that ChimeraX built on the M1 Mac doesn’t work on 10.14, should we drop support for it since Apple is no longer supporting it?

— Zach

comment:52 by Tom Goddard, 3 years ago

Our usual rule has been to support at least the last 3 macOS versions, which would be 12, 11, 10.15. But we don't drop support for older ones unless there is a good reason.

Looks like 10.15 and newer comprises 85% of macOS systems with 5% at 10.14 and 5% at 10.13

https://gs.statcounter.com/os-version-market-share/macos/desktop/worldwide

Can an M1 Mac cross-compile for Intel? On Mac we set MACOSX_DEPLOYMENT_TARGET = 10.13 in the build_tools repository (hosted on plato) in build_macosx.sh. I am a bit puzzled why our download page says 10.14 while our build scripts say they target 10.13.

comment:53 by Zach Pearson, 3 years ago

Yes, M1 Macs can cross-compile (so can Intel Macs with Catalina or newer). I tested an M1 universal build on Essex built on my M1 laptop, but it complained that it couldn't recognize some loader instruction (it got as far as trying to import the arrays shared object, then mach complained). However, it may be that if I set MACOSX_DEPLOYMENT_TARGET before building, it may produce code that Mojave can run. I'll try it again asap.

comment:54 by Tom Goddard, 3 years ago

Blocked By: 67786669, 6778

The commercial PyQt6 wheels are not working on Mac ARM64, ticket #6669. Won't be able to make a Mac ARM64 distribution until that is fixed.

comment:55 by Tom Goddard, 3 years ago

I added a build_mac_arm64.sh script to our build_tools git repository that builds the Mac ARM64 ChimeraX on euclid.cgl.ucsf.edu and I tested running it as a techpreview build. I used PyPi PyQt instead of our licensed PyQt wheels due to bug #6669. ChimeraX built but notarization failed apparently because the build machine needs some Apple notarization keychain entry. Here is the notarization error

+ cd ..
+ /usr/bin/python3 macosx_package/notarize.py everything -a chimerax/ChimeraX_techpreview.app -d chimerax.dm\
g -v -v -v
command: ['/usr/bin/security', 'unlock', '-p', 'chimera', '/Users/chimera/Library/Keychains/codesign.keychai\
n']
unlock keychain /Users/chimera/Library/Keychains/codesign.keychain failed:
command: ['/usr/bin/security', 'unlock', '-p', 'chimera', '/Users/chimera/Library/Keychains/codesign.keychai\
n']
stderr:
security: SecKeychainUnlock /Users/chimera/Library/Keychains/codesign.keychain: The specified keychain could\
 not be found.

ERROR IN NOTARIZATION
+ echo 'ERROR IN NOTARIZATION'

I will try again once I find out how to get the keychain entry. Probably Eric knows that since it must be setup on his desktop machine essex.cgl.ucsf.edu which builds the Intel Mac ChimeraX dailies.

We might document a couple other steps I had to do to setup a new daily build machine. It needed to be able to ssh to plato without a password to get the PyQt wheels (so put ssh key on plato chimera account). A ChimeraX GitHub account (I used mine) needed to add the the euclid chimera ssh key so it can git clone the chimerax repository with the git@… protocol. And the notarization script needed a PyPi package called "lief" installed on the system python, and that package needs cmake to build. Also the build machine needs to be set to not sleep, so the cron job can connect to it. I did these 4 steps.

comment:56 by Tom Goddard, 3 years ago

The next steps are

1) Put the Apple notarization key on the euclid chimera account keychain.

2) Fix the PyQt licensed wheels on plato for Mac. There are only universal PyQt6 6.3.1 Mac wheels on plato (PyQt6_commercial-6.3.1-cp37-abi3-macosx_10_14_universal2.whl, PyQt6_WebEngine_commercial-6.3.1-cp37-abi3-macosx_10_14_universal2.whl) and they work on Intel. So somehow the PyQt license handling for that wheel is working for Intel Mac but not ARM64 Mac. Ticket #6669.

3) Enable daily techpreview builds by adding shell command "./build_chimerax.sh -b techpreview -p mac_arm64" to the daily_chimerax_build script in the build_tools repository.

4) Check that the download page is able to show this techpreview. Probably needs adding the mac_arm64 platform to the download page script.

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

comment:57 by Tom Goddard, 3 years ago

I've resolved the problems except the PyQt commercial wheels do not work on Mac arm64 so I've contacted Riverbank support to fix that. ChimeraX ticket #6669.

I tested building the techpreview (with PyPi PyQt), notarizing it, and put it on the preview download web page, downloaded it and tested. Everything working. It will not be part of the nightly builds until the commercial PyQt wheels work.

Here are steps that were needed to get the techpreview builds working.

1) Notarization. I copied the codesign.keychain and codesign.keychain-db files from essex (Intel Mac build machine) ~/Library/Keychains. Also had to add that keychain in the Mac Keychains app. Then notarization failed due to missing timestamps which is a frequent problem we have on Intel Mac too. Investigation suggests the timestamp issue is UCSF firewall problems and I made a ChimeraX ticket for that #7209. By building a couple times I got past the timestamp error. Notarization still failed because a dozen .o and .a (archive) files did not get signed because our notarization.py script did not recognize those as MachO binaries. The .o problem was just an omission in our script. The .a problem seems a bug in the lief PyPi package our script uses to identify binaries. I worked around the lief bug by checking for ".a" suffixes. Then the notarization completed successfully.

2) Download page. I added a mac_arm64 build platform to our update_release_info.py script and made the download page use it. This required improving our download page javascript which is relutil-1.2.2.js to handle 2 mac platforms. Also there is a bug in the download.html page where it will not show techpreview builds if SHOW_CANDIDATES=true in that page's javascript and there are no candidate releases because that generates an error and it then never considers techpreview releases. For now we can just set SHOW_CANDIDATES=false, but this bug needs to be fixed. I've left SHOW_CANDIDATES=true so the techpreview for Mac M1 will not be shown since it is using GPL PyQt. Once we get the correct PyQt we can change the download page so the techpreview appears.

comment:58 by Tom Goddard, 3 years ago

Currently techpreview Mac M1 build is only waiting for Phil Thompson to fix PyQt6 commercial wheels. Phil says he will receive Mac M1 hardware on July 6, 2022 and it may take some days to fix the wheels.

comment:59 by Tom Goddard, 3 years ago

I made a separate ticket to investigate the difficulties of making a universal Mac ChimeraX that contains both Intel and ARM64 binaries, ticket #7222

comment:60 by Tom Goddard, 3 years ago

Phil Thompson found the PyQt6 problem, invalid code signature, and it should be easy to work around.

From: Phil Thompson <phil@riverbankcomputing.com>
Subject: Re: Commercial PyQt6 gives "This copy of PyQt is unlicensed" on Mac M1
Date: July 16, 2022 at 5:33:22 AM PDT
To: Tom Goddard 

Tom,

I've found the problem. When you download your commercial wheel it is 'licensed' to you on the fly by updating the QtCore.abi.so file with your licensing information. This process invalidates the code signature for arm64 binaries (Intel binaries don't care).

The workaround is to resign the QtCore.abi.so file yourself after installing the wheel...

codesign -s - /path/to/site-packages/PyQt6/QtCore.abi.so

I need to have a think as to the best way to fix this properly.

Regards,
Phil
From: Phil Thompson
Subject: Re: Commercial PyQt6 gives "This copy of PyQt is unlicensed" on Mac M1
Date: July 16, 2022 at 10:27:23 AM PDT
To: Tom Goddard

Tom,

The next snapshot will have the license check removed. This is the only way to fix the problem until I can sign macOS binaries on a Linux system.

Phil

comment:61 by Tom Goddard, 3 years ago

I made our prereqs/PyQt makefile re-codesign the QtCore.abi3.so library. Take this out once Phil Thompson provides a fix. Phil says the PyQt 6.3.2 release will not need the codesigning.

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

comment:62 by Tom Goddard, 3 years ago

Added the Mac M1 build to the download page as a technology preview and made the daily build script build it every night.

The build targets macOS 11 (using MACOSX_DEPLOYMENT_TARGET=11.0) but I have only tested on macOS 12. Don't have any macOS 11 machine so we will have to see if any users report a problem with macOS 11.

Used LZMA compression producing a small Mac M1 dmg file of only 250 Mbytes vs 400 Mbytes for Intel Mac with zlib compression. The LZMA compression is only available on macOS 10.15 and above and currently we support macOS 10.14 on Intel. Ticket #7274

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

comment:63 by Tom Goddard, 3 years ago

The PyQt6 6.3.1 commercial wheel from Riverbank now works on Mac M1 without re-codesigning it. I've taken out the recodesigning from prereqs/PyQt/Makefile.wheel.qt6.

Begin forwarded message:

From: Phil Thompson
Subject: Re: Commercial PyQt6 gives "This copy of PyQt is unlicensed" on Mac M1
Date: July 24, 2022 at 2:10:26 AM PDT
To: Tom Goddard

Tom,

I've now fixed the root cause properly. You should be able to re-download the v6.3.1 wheel and it should install and run.

Phil

comment:64 by Tom Goddard, 3 years ago

The Mac M1 techpreview build had 103 downloads from July 21-29, 2022 from unique IP addresses according to our web server logs.

in reply to:  66 comment:65 by tic20@…, 3 years ago

So it turns out that switching FFT libraries wasn't quite as horrible as I thought it would be. A bit of fumbling around in the dark (because it seems that nobody, anywhere, ever seems to feel it necessary to properly document an FFT library), but after a few hours of effort I'm now running happily with PocketFFT. Performance seems very similar to the MKL version, and as an added bonus the wheel file size is reduced 4-5 fold (to ~7 MB). So that's probably the biggest roadblock to a native Apple Silicon ISOLDE build out of the way.
________________________________
From: ChimeraX <ChimeraX-bugs-admin@cgl.ucsf.edu>
Sent: 20 July 2021 18:56
Cc: goddard@cgl.ucsf.edu <goddard@cgl.ucsf.edu>; pett@cgl.ucsf.edu <pett@cgl.ucsf.edu>; Tristan Croll <tic20@cam.ac.uk>
Subject: Re: [ChimeraX] #4663: Make native Apple M1 CPU distribution

#4663: Make native Apple M1 CPU distribution
----------------------------------+-------------------------
          Reporter:  Tom Goddard  |      Owner:  Tom Goddard
              Type:  enhancement  |     Status:  assigned
          Priority:  moderate     |  Milestone:
         Component:  Platform     |    Version:
        Resolution:               |   Keywords:
        Blocked By:               |   Blocking:
Notify when closed:               |   Platform:  all
           Project:  ChimeraX     |
----------------------------------+-------------------------
Changes (by Tristan Croll):

 * cc: Tristan Croll (added)


Comment:

 Supporting Apple Silicon will take a bit of work for me, I think. The big
 stumbling block will be the Intel MKL library I'm using to replace FFTW2
 in Clipper - as far as I understand, the MKL is firmly tied to x86_64
 architecture. So I'd have to find and integrate a replacement, which will
 take a fair bit of work. Not impossible, but far from trivial.

--
Ticket URL: <https://www.rbvi.ucsf.edu/trac/ChimeraX/ticket/4663#comment:14>
ChimeraX <https://www.rbvi.ucsf.edu/chimerax/>
ChimeraX Issue Tracker

comment:66 by Tom Goddard, 3 years ago

Glad to hear you have an FFT solution for Mac ARM.

Do you need a Mac ARM build machine? We could try to give you ssh access to our Mac ARM ChimeraX build machine (euclid.cgl.ucsf.edu). It is some trouble because the UCSF firewall does not allow ssh into UCSF machines. We would have to give you access to the CGL VPN or get UCSF IT to make a security exemption so ssh is possible.

in reply to:  68 comment:67 by Tristan Croll, 3 years ago

No problem there - I have a shiny new MacBook Pro to play with! Any tips
would be welcomed, though.

On Tue, 23 Aug 2022 at 02:00, ChimeraX <ChimeraX-bugs-admin@cgl.ucsf.edu>
wrote:

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

The Mac M1 doesn't require any compiler flag changes.  There is the -arch flag which lets you build both ARM and Intel binaries at the same time although you probably will not need that kind of universal build.  We have a Mac M1 ChimeraX version at the bottom of the download page under Technology Preview and plan to make daily builds in coming months and a native Mac M1 release of ChimeraX 1.5 around the end of this year.

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

Building on Mac ARM should use MACOSX_DEPLOYMENT_TARGET=11.0.  I don't know exactly how you build so I'm not sure if that will be used automatically because the Mac ARM distributed build used that setting, or if you need to change some Makefile or bundle_builder code.


in reply to:  71 ; comment:70 by Tristan Croll, 3 years ago

I have it set in the Makefile (to 10.13 because I understand that's the
current standard that ChimeraX adheres to). I don't think bundle_builder
sets this anywhere (perhaps it should?)... I added it to the Makefile
quite some time back in response to a user complaint (I updated my OS, and
as a result one of my release builds was no longer backward-compatible).
There's a ticket somewhere back in Trac - that's where I learned of the
existence of that flag, thanks to Greg.

The more I think about it, the more I think it might be sensible if
bundle_builder automatically set MACOSX_DEPLOYMENT_TARGET to its preferred
value (perhaps only doing so if it's not already set, to accommodate people
who want to be doing something special). Otherwise my code needs to figure
out whether I'm building against Intel or ARM ChimeraX and set it
accordingly (unless you plan to go to a 11.0 minimum across the board?).

On Tue, Aug 23, 2022 at 7:09 PM ChimeraX <ChimeraX-bugs-admin@cgl.ucsf.edu>
wrote:

comment:71 by Zach Pearson, 3 years ago

Type: enhancementdefect

comment:72 by Zach Pearson, 3 years ago

Type: defectenhancement

comment:73 by Zach Pearson, 3 years ago

Resolution: fixed
Status: assignedclosed

Tom was able to get an M1 build and a Universal build up as daily builds.

Note: See TracTickets for help on using tickets.