Closed hjuinj closed 7 months ago
I'm not seeing this:
Thank you, do you observe it if you do instead:
from openff.toolkit.topology import Molecule
from rdkit import Chem
from rdkit.Chem import AllChem
mol = Chem.AddHs(Chem.MolFromSmiles("CO"))
AllChem.EmbedMolecule(mol)
offmol = Molecule.from_rdkit(mol)
for atm in offmol.atoms:
atm.metadata["chain_id"] = "1" #!!! offending line!
offmol.visualize(backend = "nglview")
Also which version of nglview and openff-toolkit are you using?
Looks the same with = "1"
on my end.
Here's my environment - could you also share yours?
this is super weird,
I created a minimal env:
name: foo
channels:
- conda-forge
dependencies:
- nglview
- openff-toolkit
- rdkit
and I have micromamba
to create env.
The resulting env has the following versions:
List of packages in environment: "/micromamba/envs/to_delete"
Name Version Build Channel
─────────────────────────────────────────────────────────────────────────────────
_libgcc_mutex 0.1 conda_forge conda-forge
_openmp_mutex 4.5 2_gnu conda-forge
ambertools 23.3 py311h9fea076_6 conda-forge
annotated-types 0.6.0 pyhd8ed1ab_0 conda-forge
anyio 4.0.0 pyhd8ed1ab_0 conda-forge
argon2-cffi 23.1.0 pyhd8ed1ab_0 conda-forge
argon2-cffi-bindings 21.2.0 py311h459d7ec_4 conda-forge
arpack 3.8.0 nompi_h0baa96a_101 conda-forge
arrow 1.3.0 pyhd8ed1ab_0 conda-forge
asttokens 2.4.1 pyhd8ed1ab_0 conda-forge
astunparse 1.6.3 pyhd8ed1ab_0 conda-forge
async-lru 2.0.4 pyhd8ed1ab_0 conda-forge
attrs 23.1.0 pyh71513ae_1 conda-forge
babel 2.13.1 pyhd8ed1ab_0 conda-forge
backports 1.0 pyhd8ed1ab_3 conda-forge
backports.functools_lru_cache 1.6.5 pyhd8ed1ab_0 conda-forge
beautifulsoup4 4.12.2 pyha770c72_0 conda-forge
bleach 6.1.0 pyhd8ed1ab_0 conda-forge
blosc 1.21.5 h0f2a231_0 conda-forge
brotli 1.1.0 hd590300_1 conda-forge
brotli-bin 1.1.0 hd590300_1 conda-forge
brotli-python 1.1.0 py311hb755f60_1 conda-forge
bson 0.5.9 py_0 conda-forge
bzip2 1.0.8 hd590300_5 conda-forge
c-ares 1.21.0 hd590300_0 conda-forge
c-blosc2 2.11.2 hb4ffafa_0 conda-forge
ca-certificates 2023.7.22 hbcca054_0 conda-forge
cached-property 1.5.2 hd8ed1ab_1 conda-forge
cached_property 1.5.2 pyha770c72_1 conda-forge
cachetools 5.3.2 pyhd8ed1ab_0 conda-forge
cairo 1.18.0 h3faef2a_0 conda-forge
certifi 2023.7.22 pyhd8ed1ab_0 conda-forge
cffi 1.16.0 py311hb3a22ac_0 conda-forge
charset-normalizer 3.3.2 pyhd8ed1ab_0 conda-forge
colorama 0.4.6 pyhd8ed1ab_0 conda-forge
comm 0.1.4 pyhd8ed1ab_0 conda-forge
contourpy 1.2.0 py311h9547e67_0 conda-forge
cudatoolkit 11.8.0 h4ba93d1_12 conda-forge
cycler 0.12.1 pyhd8ed1ab_0 conda-forge
debugpy 1.8.0 py311hb755f60_1 conda-forge
decorator 5.1.1 pyhd8ed1ab_0 conda-forge
defusedxml 0.7.1 pyhd8ed1ab_0 conda-forge
entrypoints 0.4 pyhd8ed1ab_0 conda-forge
exceptiongroup 1.1.3 pyhd8ed1ab_0 conda-forge
executing 2.0.1 pyhd8ed1ab_0 conda-forge
expat 2.5.0 hcb278e6_1 conda-forge
fftw 3.3.10 nompi_hc118613_108 conda-forge
font-ttf-dejavu-sans-mono 2.37 hab24e00_0 conda-forge
font-ttf-inconsolata 3.000 h77eed37_0 conda-forge
font-ttf-source-code-pro 2.038 h77eed37_0 conda-forge
font-ttf-ubuntu 0.83 hab24e00_0 conda-forge
fontconfig 2.14.2 h14ed4e7_0 conda-forge
fonts-conda-ecosystem 1 0 conda-forge
fonts-conda-forge 1 0 conda-forge
fonttools 4.44.3 py311h459d7ec_0 conda-forge
fqdn 1.5.1 pyhd8ed1ab_0 conda-forge
freetype 2.12.1 h267a509_2 conda-forge
freetype-py 2.3.0 pyhd8ed1ab_0 conda-forge
gettext 0.21.1 h27087fc_0 conda-forge
greenlet 3.0.1 py311hb755f60_0 conda-forge
hdf4 4.2.15 h2a13503_7 conda-forge
hdf5 1.14.2 nompi_h4f84152_100 conda-forge
icu 73.2 h59595ed_0 conda-forge
idna 3.4 pyhd8ed1ab_0 conda-forge
importlib-metadata 6.8.0 pyha770c72_0 conda-forge
importlib_metadata 6.8.0 hd8ed1ab_0 conda-forge
importlib_resources 6.1.1 pyhd8ed1ab_0 conda-forge
ipykernel 6.26.0 pyhf8b6a83_0 conda-forge
ipython 8.17.2 pyh41d4057_0 conda-forge
ipywidgets 8.1.1 pyhd8ed1ab_0 conda-forge
isoduration 20.11.0 pyhd8ed1ab_0 conda-forge
jedi 0.19.1 pyhd8ed1ab_0 conda-forge
jinja2 3.1.2 pyhd8ed1ab_1 conda-forge
joblib 1.3.2 pyhd8ed1ab_0 conda-forge
json5 0.9.14 pyhd8ed1ab_0 conda-forge
jsonpointer 2.4 py311h38be061_3 conda-forge
jsonschema 4.20.0 pyhd8ed1ab_0 conda-forge
jsonschema-specifications 2023.11.1 pyhd8ed1ab_0 conda-forge
jsonschema-with-format-nongpl 4.20.0 pyhd8ed1ab_0 conda-forge
jupyter-lsp 2.2.0 pyhd8ed1ab_0 conda-forge
jupyter_client 8.6.0 pyhd8ed1ab_0 conda-forge
jupyter_core 5.5.0 py311h38be061_0 conda-forge
jupyter_events 0.9.0 pyhd8ed1ab_0 conda-forge
jupyter_server 2.10.1 pyhd8ed1ab_0 conda-forge
jupyter_server_terminals 0.4.4 pyhd8ed1ab_1 conda-forge
jupyterlab 4.0.8 pyhd8ed1ab_0 conda-forge
jupyterlab_pygments 0.2.2 pyhd8ed1ab_0 conda-forge
jupyterlab_server 2.25.1 pyhd8ed1ab_0 conda-forge
jupyterlab_widgets 3.0.9 pyhd8ed1ab_0 conda-forge
keyutils 1.6.1 h166bdaf_0 conda-forge
kiwisolver 1.4.5 py311h9547e67_1 conda-forge
krb5 1.21.2 h659d440_0 conda-forge
lcms2 2.15 hb7c19ff_3 conda-forge
ld_impl_linux-64 2.40 h41732ed_0 conda-forge
lerc 4.0.0 h27087fc_0 conda-forge
libaec 1.1.2 h59595ed_1 conda-forge
libblas 3.9.0 19_linux64_openblas conda-forge
libboost 1.82.0 h6fcfa73_6 conda-forge
libboost-python 1.82.0 py311h92ebd52_6 conda-forge
libbrotlicommon 1.1.0 hd590300_1 conda-forge
libbrotlidec 1.1.0 hd590300_1 conda-forge
libbrotlienc 1.1.0 hd590300_1 conda-forge
libcblas 3.9.0 19_linux64_openblas conda-forge
libcurl 8.4.0 hca28451_0 conda-forge
libdeflate 1.19 hd590300_0 conda-forge
libedit 3.1.20191231 he28a2e2_2 conda-forge
libev 4.33 h516909a_1 conda-forge
libexpat 2.5.0 hcb278e6_1 conda-forge
libffi 3.4.2 h7f98852_5 conda-forge
libgcc-ng 13.2.0 h807b86a_3 conda-forge
libgfortran-ng 13.2.0 h69a702a_3 conda-forge
libgfortran5 13.2.0 ha4646dd_3 conda-forge
libglib 2.78.1 h783c2da_1 conda-forge
libgomp 13.2.0 h807b86a_3 conda-forge
libiconv 1.17 h166bdaf_0 conda-forge
libjpeg-turbo 3.0.0 hd590300_1 conda-forge
liblapack 3.9.0 19_linux64_openblas conda-forge
libnetcdf 4.9.2 nompi_h80fb2b6_112 conda-forge
libnghttp2 1.58.0 h47da74e_0 conda-forge
libnsl 2.0.1 hd590300_0 conda-forge
libopenblas 0.3.24 pthreads_h413a1c8_0 conda-forge
libpng 1.6.39 h753d276_0 conda-forge
libsodium 1.0.18 h36c2ea0_1 conda-forge
libsqlite 3.44.0 h2797004_0 conda-forge
libssh2 1.11.0 h0841786_0 conda-forge
libstdcxx-ng 13.2.0 h7e041cc_3 conda-forge
libtiff 4.6.0 ha9c0a0a_2 conda-forge
libuuid 2.38.1 h0b41bf4_0 conda-forge
libwebp-base 1.3.2 hd590300_0 conda-forge
libxcb 1.15 h0b41bf4_0 conda-forge
libxml2 2.11.5 h232c23b_1 conda-forge
libzip 1.10.1 h2629f0a_3 conda-forge
libzlib 1.2.13 hd590300_5 conda-forge
lz4-c 1.9.4 hcb278e6_0 conda-forge
lzo 2.10 h516909a_1000 conda-forge
markupsafe 2.1.3 py311h459d7ec_1 conda-forge
matplotlib-base 3.8.1 py311h54ef318_0 conda-forge
matplotlib-inline 0.1.6 pyhd8ed1ab_0 conda-forge
mda-xdrlib 0.2.0 pyhd8ed1ab_0 conda-forge
mdtraj 1.9.9 py311h90fe790_1 conda-forge
mistune 3.0.2 pyhd8ed1ab_0 conda-forge
munkres 1.1.4 pyh9f0ad1d_0 conda-forge
nbclient 0.8.0 pyhd8ed1ab_0 conda-forge
nbconvert-core 7.11.0 pyhd8ed1ab_0 conda-forge
nbformat 5.9.2 pyhd8ed1ab_0 conda-forge
ncurses 6.4 h59595ed_2 conda-forge
nest-asyncio 1.5.8 pyhd8ed1ab_0 conda-forge
netcdf-fortran 4.6.1 nompi_hacb5139_102 conda-forge
networkx 3.2.1 pyhd8ed1ab_0 conda-forge
nglview 3.0.8 pyh1da8cd4_0 conda-forge
nomkl 1.0 h5ca1d4c_0 conda-forge
notebook 7.0.6 pyhd8ed1ab_0 conda-forge
notebook-shim 0.2.3 pyhd8ed1ab_0 conda-forge
numexpr 2.8.7 py311h039bad6_104 conda-forge
numpy 1.26.0 py311h64a7726_0 conda-forge
ocl-icd 2.3.1 h7f98852_0 conda-forge
ocl-icd-system 1.0.0 1 conda-forge
openff-amber-ff-ports 0.0.4 pyhca7485f_0 conda-forge
openff-forcefields 2023.11.0 pyhca7485f_0 conda-forge
openff-interchange 0.3.18 pyhd8ed1ab_0 conda-forge
openff-interchange-base 0.3.18 pyhd8ed1ab_0 conda-forge
openff-models 0.1.1 pyhca7485f_0 conda-forge
openff-toolkit 0.14.5 pyhd8ed1ab_1 conda-forge
openff-toolkit-base 0.14.5 pyhd8ed1ab_1 conda-forge
openff-units 0.2.1 pyh1a96a4e_0 conda-forge
openff-utilities 0.1.11 pyhd8ed1ab_0 conda-forge
openjpeg 2.5.0 h488ebb8_3 conda-forge
openmm 8.0.0 py311h9766050_4 conda-forge
openssl 3.1.4 hd590300_0 conda-forge
overrides 7.4.0 pyhd8ed1ab_0 conda-forge
packaging 23.2 pyhd8ed1ab_0 conda-forge
packmol 20.010 h86c2bf4_0 conda-forge
pandas 2.1.3 py311h320fe9a_0 conda-forge
pandocfilters 1.5.0 pyhd8ed1ab_0 conda-forge
panedr 0.7.2 pyhd8ed1ab_0 conda-forge
parmed 4.2.2 py311hb755f60_1 conda-forge
parso 0.8.3 pyhd8ed1ab_0 conda-forge
pbr 6.0.0 pyhd8ed1ab_0 conda-forge
pcre2 10.42 hcad00b1_0 conda-forge
perl 5.32.1 4_hd590300_perl5 conda-forge
pexpect 4.8.0 pyh1a96a4e_2 conda-forge
pickleshare 0.7.5 py_1003 conda-forge
pillow 10.1.0 py311ha6c5da5_0 conda-forge
pint 0.21 pyhd8ed1ab_0 conda-forge
pip 23.3.1 pyhd8ed1ab_0 conda-forge
pixman 0.42.2 h59595ed_0 conda-forge
pkgutil-resolve-name 1.3.10 pyhd8ed1ab_1 conda-forge
platformdirs 4.0.0 pyhd8ed1ab_0 conda-forge
prometheus_client 0.18.0 pyhd8ed1ab_1 conda-forge
prompt-toolkit 3.0.41 pyha770c72_0 conda-forge
prompt_toolkit 3.0.41 hd8ed1ab_0 conda-forge
psutil 5.9.5 py311h459d7ec_1 conda-forge
pthread-stubs 0.4 h36c2ea0_1001 conda-forge
ptyprocess 0.7.0 pyhd3deb0d_0 conda-forge
pure_eval 0.2.2 pyhd8ed1ab_0 conda-forge
py-cpuinfo 9.0.0 pyhd8ed1ab_0 conda-forge
pycairo 1.25.1 py311h8feb60e_0 conda-forge
pycparser 2.21 pyhd8ed1ab_0 conda-forge
pydantic 2.5.1 pyhd8ed1ab_0 conda-forge
pydantic-core 2.14.3 py311h46250e7_0 conda-forge
pyedr 0.7.2 pyhd8ed1ab_0 conda-forge
pygments 2.16.1 pyhd8ed1ab_0 conda-forge
pyparsing 3.1.1 pyhd8ed1ab_0 conda-forge
pysocks 1.7.1 pyha2e5f31_6 conda-forge
pytables 3.9.1 py311h10c7f7f_0 conda-forge
python 3.11.6 hab00c5b_0_cpython conda-forge
python-constraint 1.4.0 py_0 conda-forge
python-dateutil 2.8.2 pyhd8ed1ab_0 conda-forge
python-fastjsonschema 2.19.0 pyhd8ed1ab_0 conda-forge
python-json-logger 2.0.7 pyhd8ed1ab_0 conda-forge
python-tzdata 2023.3 pyhd8ed1ab_0 conda-forge
python_abi 3.11 4_cp311 conda-forge
pytz 2023.3.post1 pyhd8ed1ab_0 conda-forge
pyyaml 6.0.1 py311h459d7ec_1 conda-forge
pyzmq 25.1.1 py311h34ded2d_2 conda-forge
rdkit 2023.09.2 py311h4c2f14b_0 conda-forge
readline 8.2 h8228510_1 conda-forge
referencing 0.31.0 pyhd8ed1ab_0 conda-forge
reportlab 4.0.7 py311h459d7ec_0 conda-forge
requests 2.31.0 pyhd8ed1ab_0 conda-forge
rfc3339-validator 0.1.4 pyhd8ed1ab_0 conda-forge
rfc3986-validator 0.1.1 pyh9f0ad1d_0 conda-forge
rlpycairo 0.2.0 pyhd8ed1ab_0 conda-forge
rpds-py 0.13.0 py311h46250e7_0 conda-forge
scipy 1.11.3 py311h64a7726_1 conda-forge
send2trash 1.8.2 pyh41d4057_0 conda-forge
setuptools 68.2.2 pyhd8ed1ab_0 conda-forge
six 1.16.0 pyh6c4a22f_0 conda-forge
smirnoff99frosst 1.1.0 pyh44b312d_0 conda-forge
snappy 1.1.10 h9fff704_0 conda-forge
sniffio 1.3.0 pyhd8ed1ab_0 conda-forge
soupsieve 2.5 pyhd8ed1ab_1 conda-forge
sqlalchemy 2.0.23 py311h459d7ec_0 conda-forge
stack_data 0.6.2 pyhd8ed1ab_0 conda-forge
terminado 0.18.0 pyh0d859eb_0 conda-forge
tinycss2 1.2.1 pyhd8ed1ab_0 conda-forge
tk 8.6.13 noxft_h4845f30_101 conda-forge
tomli 2.0.1 pyhd8ed1ab_0 conda-forge
tornado 6.3.3 py311h459d7ec_1 conda-forge
tqdm 4.66.1 pyhd8ed1ab_0 conda-forge
traitlets 5.13.0 pyhd8ed1ab_0 conda-forge
types-python-dateutil 2.8.19.14 pyhd8ed1ab_0 conda-forge
typing-extensions 4.8.0 hd8ed1ab_0 conda-forge
typing_extensions 4.8.0 pyha770c72_0 conda-forge
typing_utils 0.1.0 pyhd8ed1ab_0 conda-forge
tzdata 2023c h71feb2d_0 conda-forge
uri-template 1.3.0 pyhd8ed1ab_0 conda-forge
urllib3 2.1.0 pyhd8ed1ab_0 conda-forge
wcwidth 0.2.10 pyhd8ed1ab_0 conda-forge
webcolors 1.13 pyhd8ed1ab_0 conda-forge
webencodings 0.5.1 pyhd8ed1ab_2 conda-forge
websocket-client 1.6.4 pyhd8ed1ab_0 conda-forge
wheel 0.41.3 pyhd8ed1ab_0 conda-forge
widgetsnbextension 4.0.9 pyhd8ed1ab_0 conda-forge
xmltodict 0.13.0 pyhd8ed1ab_0 conda-forge
xorg-kbproto 1.0.7 h7f98852_1002 conda-forge
xorg-libice 1.1.1 hd590300_0 conda-forge
xorg-libsm 1.2.4 h7391055_0 conda-forge
xorg-libx11 1.8.7 h8ee46fc_0 conda-forge
xorg-libxau 1.0.11 hd590300_0 conda-forge
xorg-libxdmcp 1.1.3 h7f98852_0 conda-forge
xorg-libxext 1.3.4 h0b41bf4_2 conda-forge
xorg-libxrender 0.9.11 hd590300_0 conda-forge
xorg-libxt 1.3.0 hd590300_1 conda-forge
xorg-renderproto 0.11.1 h7f98852_1002 conda-forge
xorg-xextproto 7.3.0 h0b41bf4_1003 conda-forge
xorg-xproto 7.0.31 h7f98852_1007 conda-forge
xz 5.2.6 h166bdaf_0 conda-forge
yaml 0.2.5 h7f98852_2 conda-forge
zeromq 4.3.5 h59595ed_0 conda-forge
zipp 3.17.0 pyhd8ed1ab_0 conda-forge
zlib 1.2.13 hd590300_5 conda-forge
zlib-ng 2.0.7 h0b41bf4_0 conda-forge
zstd 1.5.5 hfc55251_0 conda-forge
And I always get something that looks like this in my vscode jupyter session:
Hard to say; if you can reproduce this without OpenFF code (i.e. just a PDB file) and narrow it down, Hai might be able to help you over at the NGLview repo. Otherwise the common debugging strategies involve trying a different browser, clearing various caches, using a different Jupyter provider (notebooks vs. JupyterLab vs. etc. etc.) or tinkering with what other widgets and extensions are installed. If you search elsewhere you'll find other ideas as well; OpenFF's use of NGLview attempts to be direct and not do anything too crazy.
I take that back - without OpenEye in my environment I can reproduce what you're seeing. No need to shift the blame to others.
Josh (the author of that PR you found) is out for a bit, when they're back I'll defer to them for the authoritative word on this.
yeah looking at the source code it is the case that without openeye, writing out mol2 file string for nglview is not possible, so PDB format is being used, and I remember seeing another issue in nglview https://github.com/nglviewer/ngl/pull/977 that says something about over-generously putting bonds with pdb.
So would you agree with me this most likely does not damage the integrity of the underlying openff mol object? it is a visualisation hiccup?
So would you agree with me this most likely does not damage the integrity of the underlying openff mol object? it is a visualisation hiccup?
Completely agree; visualization is just a funky transformation between models. If the toolkit objects are otherwise behaving well, there's nothing (besides the obvious) to be worried about with a quirky visualization.
It looks like that NGLView PR got merged, and presumably this is resolved. Thanks for opening the report, @hjuinj, and thanks @mattwthompson for following up. Please feel free to reopen if this continues to be a problem!
I am using openff.toolkit version 0.14.4
I am seeing a weird behaviour when visualising an openff Molecule object in jupyter (via nglview). In a jupyter cell, if I do:
The visualisation displays a normal alcohol.
But if I instead try to modify the atomic metadata records, with either residue number, id or chain id, the visualisation is corrupted (and the corruption differs by the value I assign to that particular metadata):
I am not quite sure if this is to be fixed with https://github.com/openforcefield/openff-toolkit/pull/1751 by @Yoshanuikabundi , also I am trying to convince myself that the underlying molecule object is still okay? So I thought I ought to file a report just to be 100% sure.
Thank you.