Closed Yoshanuikabundi closed 6 months ago
Seems valid to me; I don't think this specific case has been tested, so I'm not surprised.
@Yoshanuikabundi any opinion if, in the case of box_vectors=None
, the box vectors should be inferred from the system, topology, or both (with some precedence)? If I'm not mistaken, both OpenMM objects can contain box information but neither must.
I'm not sure where in the attached notebook, maybe there's a different version you mean to upload?
With the current code I'm struggling to see how this could come about. There's no processing of the box_vectors
argument, just setting it if provided. (Perhaps the validation could be improved here; I can't imagine this data type cropping up by any means but a mangled validator.)
I believe the system must contain box info if any of the forces rely on periodicity - at least, ForceField.createSystem()
raises an exception if you ask it for PME without giving the topology box vectors. I think taking box vectors from the system is appropriate, as that's where OpenMM takes them from, and the whole point is to import that behavior.
Sorry about linking the wrong notebook - I think I somehow just had old outputs. Here's the freshly executed notebook with correctly incorrect outputs (last few cells): rna_from_rdkit.zip
I agree that it's the validator that's doing it - it seems to be a part of the ArrayQuantity.validate_type()
call here: https://github.com/openforcefield/openff-interchange/blob/1caa3d44e840f904791a48955a31981560d85f43/openff/interchange/components/interchange.py#L161C22-L161C56
openff-models
0.1.2 should fix this, I think without any code changes in Interchange itself. Those builds should be online within the hour (https://github.com/conda-forge/openff-models-feedstock/pull/16)
(And here's a comment from this morning which I neglected to send then!)
I believe the system must contain box info if any of the forces rely on periodicity ...
Agreed
I can't get that specific error from that notebook, either, but it wasn't too hard to hunt down the specific tension. Strictly conflicting with the documentation, openmm.System.getDefaultPeriodicBoxVectors
returns list[openmm.unit.Quantity[Vec3]]
, something that the validator is somehow not prepared to work around. Probably because it's as weird case - usually a list-like object is being wrapped, not doing the wrapping.
Looking like this is fixed just with the openff-models
release; eventually this will be tested by changes in #883
@mattwthompson Something strange is still happening - if I use ArrayQuantity.validate_type
before passing the box to Interchange.from_openmm
, everything's fine, but if I just pass the box straight from the system, or let from_openmm
do it automatically, I still get a mangled box type.
>>> interchange_from_openmm = Interchange.from_openmm(
... topology,
... system,
... positions,
... box_vectors=ArrayQuantity.validate_type(system.getDefaultPeriodicBoxVectors()),
... )
>>> interchange_from_openmm.box
<Quantity([[5.5319 0. 0. ], [0. 5.9681 0. ], [0. 0. 6.7198]], 'nanometer')>
>>> interchange_from_openmm = Interchange.from_openmm(
... topology,
... system,
... positions,
... # Same result if next line is removed
... box_vectors=system.getDefaultPeriodicBoxVectors(),
... )
>>> interchange_from_openmm.box
<Quantity([[Quantity(value=5.5319, unit=nanometer), Quantity(value=0.0, unit=nanometer) Quantity(value=0.0, unit=nanometer)], [Quantity(value=0.0, unit=nanometer), Quantity(value=5.9681, unit=nanometer), Quantity(value=0.0, unit=nanometer)], [Quantity(value=0.0, unit=nanometer) Quantity(value=0.0, unit=nanometer), Quantity(value=6.719799999999999, unit=nanometer)]], 'nanometer')>
This seems to happen before the box validator runs - if I print debug the box validator and the from_openmm
function:
# In openff.interchange.interop.openmm._import._import.from_openmm:
...
elif system is not None:
print("box from system", system.getDefaultPeriodicBoxVectors())
interchange.box = system.getDefaultPeriodicBoxVectors()
...
# In openff.interchange.components.interchange.Interchange.validate_box:
...
if value is None:
return value
print("validating", value)
first_pass = ArrayQuantity.validate_type(value)
print("first_pass", first_pass)
...
print("validated", box)
return box
...
I get:
>>> interchange_from_openmm = Interchange.from_openmm(
... topology,
... system,
... positions,
... )
box from system [Quantity(value=Vec3(x=5.5319, y=0.0, z=0.0), unit=nanometer), Quantity(value=Vec3(x=0.0, y=5.9681, z=0.0), unit=nanometer), Quantity(value=Vec3(x=0.0, y=0.0, z=6.719799999999999), unit=nanometer)]
validating [[Quantity(value=5.5319, unit=nanometer) Quantity(value=0.0, unit=nanometer) Quantity(value=0.0, unit=nanometer)] [Quantity(value=0.0, unit=nanometer) Quantity(value=5.9681, unit=nanometer) Quantity(value=0.0, unit=nanometer)] [Quantity(value=0.0, unit=nanometer) Quantity(value=0.0, unit=nanometer) Quantity(value=6.719799999999999, unit=nanometer)]] nanometer
first_pass [[Quantity(value=5.5319, unit=nanometer) Quantity(value=0.0, unit=nanometer) Quantity(value=0.0, unit=nanometer)] [Quantity(value=0.0, unit=nanometer) Quantity(value=5.9681, unit=nanometer) Quantity(value=0.0, unit=nanometer)] [Quantity(value=0.0, unit=nanometer) Quantity(value=0.0, unit=nanometer) Quantity(value=6.719799999999999, unit=nanometer)]] nanometer
validated [[Quantity(value=5.5319, unit=nanometer) Quantity(value=0.0, unit=nanometer) Quantity(value=0.0, unit=nanometer)] [Quantity(value=0.0, unit=nanometer) Quantity(value=5.9681, unit=nanometer) Quantity(value=0.0, unit=nanometer)] [Quantity(value=0.0, unit=nanometer) Quantity(value=0.0, unit=nanometer) Quantity(value=6.719799999999999, unit=nanometer)]] nanometer
So I have no idea what's going on there, but it does suggest an easy-but-hacky fix of just calling the validate_type
method when setting the box vectors in from_openmm
.
Here's a much more minimal reproducing notebook: box_vecs_from_openmm.zip
Hmm, okay, more test cases to include. I'm not sure why that's failing; it's meant to just be validated when it's set, and either code path
should hit the same validator
Lovely, the discrepancy is that this behavior is in ArrayQuantity.validate_type
but not from_openmm
:
In [8]: system = openmm.XmlSerializer.deserialize(open("system.xml").read())
In [9]: Interchange.from_openmm(
...: system=system, box_vectors=system.getDefaultPeriodicBoxVectors()
...: ).box == Interchange.from_openmm(system=system).box
Out[9]:
array([[ True, True, True],
[ True, True, True],
[ True, True, True]])
In [10]: from openff.units.openmm import from_openmm
In [11]: Interchange.from_openmm(
...: system=system, box_vectors=from_openmm(system.getDefaultPeriodicBoxVectors())
...: ).box == Interchange.from_openmm(system=system).box
Out[11]:
array([[False, False, False],
[False, False, False],
[False, False, False]])
Haha, shame on me for thinking that validate_assignment=True
meant that assignments would be validated!
In [5]: tmp = Interchange()
In [6]: tmp.Config.validate_assignment
Out[6]: True
In [7]: tmp.box = system.getDefaultPeriodicBoxVectors()
In [8]: tmp.box
Out[8]:
array([[Quantity(value=2.5, unit=nanometer),
Quantity(value=0.0, unit=nanometer),
Quantity(value=0.0, unit=nanometer)],
[Quantity(value=0.0, unit=nanometer),
Quantity(value=2.5, unit=nanometer),
Quantity(value=0.0, unit=nanometer)],
[Quantity(value=0.0, unit=nanometer),
Quantity(value=0.0, unit=nanometer),
Quantity(value=2.5, unit=nanometer)]], dtype=object) <Unit('nanometer')>
In [9]: tmp.box = Interchange.validate_box(system.getDefaultPeriodicBoxVectors())
In [10]: tmp.box
Out[10]:
array([[2.5, 0. , 0. ],
[0. , 2.5, 0. ],
[0. , 0. , 2.5]]) <Unit('nanometer')>
In [22]: Interchange.__validators__["box"][0].func
Out[22]: <function openff.interchange.components.interchange.Interchange.validate_box(cls, value) -> Optional[pint.util.Quantity]>
And I guess the system objects must contain some sort of box information. I got it in my head at some point that these could be none:
In [5]: system.setDefaultPeriodicBoxVectors(None, None, None)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-5-a0c46415c88c> in ?()
----> 1 system.setDefaultPeriodicBoxVectors(None, None, None)
~/micromamba/envs/openff-interchange-dev/lib/python3.11/site-packages/openmm/openmm.py in ?(self, a, b, c)
14362 if unit.is_quantity(c):
14363 c = c.value_in_unit(unit.nanometer)
14364
14365
> 14366 return _openmm.System_setDefaultPeriodicBoxVectors(self, a, b, c)
ValueError: in method System_setDefaultPeriodicBoxVectors, argument 2 could not be converted to type Vec3 const &
Okay, let me be more concise here, after #895 (might make it into a 0.3.20 today)
interchange_from_openmm = Interchange.from_openmm(
topology,
system,
positions,
)
interchange_from_openmm.box # mangled
this one is now fixed
interchange_from_openmm = Interchange.from_openmm(
topology,
system,
positions,
box_vectors=ArrayQuantity.validate_type(system.getDefaultPeriodicBoxVectors()),
)
interchange_from_openmm.box # perfect
still perfect 🤞
interchange_from_openmm = Interchange.from_openmm(
topology,
system,
positions,
box_vectors=system.getDefaultPeriodicBoxVectors(),
)
interchange_from_openmm.box # mangled
this one is now fixed
from openff.units import ensure_quantity
ensure_quantity(system.getDefaultPeriodicBoxVectors(), 'openff') # mangled
this one is not fixed; for now I'm waving my hands and saying that this isn't supported. The contortions that need to take place to support this are undesirable, and I hope (perhaps with some more documentation and parsing errors) this isn't needed given the above ways Interchange.from_openmm
can digest box information
Description
Loading an OpenMM system with box vectors with the
Interchange.from_openmm()
method, without specifying thebox_vectors
argument, takes the box vectors for the newInterchange
from the oldSystem
. This is a great, helpful feature, but the conversion to OpenFF units is a bit messed up. It usually works fine, but when using the+
operator to combineInterchanges
with numerically identical boxes it can fail asQuantity(2.0, nanometer) != 2.0
This same unit conversion bug seems to be present in both the OpenFF Models unit conversion function and
openff.units.ensure_quantity
as well.Reproduction Here's a notebook that creates an RNA molecule, parametrizes it with OpenMM, and then attempts to combine that with an Interchange created with
from_smirnoff
rna_from_rdkit.zip
Output
Software versions
What is the output of running
conda list
?expando
Name Version Build Channel
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── _libgcc_mutex 0.1 conda_forge conda-forge
_openmp_mutex 4.5 2_kmp_llvm conda-forge
absl-py 2.1.0 pyhd8ed1ab_0 conda-forge
aiofiles 22.1.0 pyhd8ed1ab_0 conda-forge
aiohttp 3.9.1 py311h459d7ec_0 conda-forge
aiosignal 1.3.1 pyhd8ed1ab_0 conda-forge
aiosqlite 0.19.0 pyhd8ed1ab_0 conda-forge
ambertools 23.3 py311h9fea076_6 conda-forge
anyio 4.2.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
ase 3.22.1 pyhd8ed1ab_1 conda-forge
asttokens 2.4.1 pyhd8ed1ab_0 conda-forge
astunparse 1.6.3 pyhd8ed1ab_0 conda-forge
attrs 23.2.0 pyh71513ae_0 conda-forge
aws-c-auth 0.7.3 h28f7589_1 conda-forge
aws-c-cal 0.6.1 hc309b26_1 conda-forge
aws-c-common 0.9.0 hd590300_0 conda-forge
aws-c-compression 0.2.17 h4d4d85c_2 conda-forge
aws-c-event-stream 0.3.1 h2e3709c_4 conda-forge
aws-c-http 0.7.11 h00aa349_4 conda-forge
aws-c-io 0.13.32 he9a53bd_1 conda-forge
aws-c-mqtt 0.9.3 hb447be9_1 conda-forge
aws-c-s3 0.3.14 hf3aad02_1 conda-forge
aws-c-sdkutils 0.1.12 h4d4d85c_1 conda-forge
aws-checksums 0.1.17 h4d4d85c_1 conda-forge
aws-crt-cpp 0.21.0 hb942446_5 conda-forge
aws-sdk-cpp 1.10.57 h85b1a90_19 conda-forge
babel 2.14.0 pyhd8ed1ab_0 conda-forge
beautifulsoup4 4.12.3 pyha770c72_0 conda-forge
binutils_impl_linux-64 2.40 hf600244_0 conda-forge
binutils_linux-64 2.40 hbdbef99_2 conda-forge
bleach 6.1.0 pyhd8ed1ab_0 conda-forge
blinker 1.7.0 pyhd8ed1ab_0 conda-forge
blosc 1.21.5 h0f2a231_0 conda-forge
boltons 23.1.1 pyhd8ed1ab_0 conda-forge
brotli 1.0.9 h166bdaf_9 conda-forge
brotli-bin 1.0.9 h166bdaf_9 conda-forge
brotli-python 1.0.9 py311ha362b79_9 conda-forge
bson 0.5.9 py_0 conda-forge
bzip2 1.0.8 hd590300_5 conda-forge
c-ares 1.26.0 hd590300_0 conda-forge
c-blosc2 2.13.1 hb4ffafa_0 conda-forge
ca-certificates 2023.11.17 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.11.17 pyhd8ed1ab_0 conda-forge
cffi 1.16.0 py311hb3a22ac_0 conda-forge
chardet 5.2.0 py311h38be061_1 conda-forge
charset-normalizer 3.3.2 pyhd8ed1ab_0 conda-forge
click 8.1.7 unix_pyh707e725_0 conda-forge
click-option-group 0.5.6 pyhd8ed1ab_0 conda-forge
cloudpickle 3.0.0 pyhd8ed1ab_0 conda-forge
cmake 3.28.2 hcfe8598_0 conda-forge
colorama 0.4.6 pyhd8ed1ab_0 conda-forge
comm 0.2.1 pyhd8ed1ab_0 conda-forge
contourpy 1.2.0 py311h9547e67_0 conda-forge
coverage 7.4.1 py311h459d7ec_0 conda-forge
cryptography 42.0.2 py311hcb13ee4_0 conda-forge
cudatoolkit 11.2.2 hf4e28a0_8 jaimergp/label/unsupported-cudatoolkit-shim cycler 0.12.1 pyhd8ed1ab_0 conda-forge
cytoolz 0.12.2 py311h459d7ec_1 conda-forge
dask-core 2024.1.1 pyhd8ed1ab_0 conda-forge
dask-jobqueue 0.8.2 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
dgl 1.1.2 py311hf3abf55_2 conda-forge
distributed 2024.1.1 pyhd8ed1ab_0 conda-forge
ele 0.2.0 pyhd8ed1ab_0 conda-forge
entrypoints 0.4 pyhd8ed1ab_0 conda-forge
exceptiongroup 1.2.0 pyhd8ed1ab_2 conda-forge
execnet 2.0.2 pyhd8ed1ab_0 conda-forge
executing 2.0.1 pyhd8ed1ab_0 conda-forge
expat 2.5.0 hcb278e6_1 conda-forge
f90wrap 0.2.13 py311hbc92942_2 conda-forge
fftw 3.3.10 mpi_openmpi_h4a81ba8_8 conda-forge
filelock 3.13.1 pyhd8ed1ab_0 conda-forge
flask 3.0.1 pyhd8ed1ab_0 conda-forge
flatbuffers 23.5.26 h59595ed_1 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 h77eed37_1 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.47.2 py311h459d7ec_0 conda-forge
forcefield-utilities 0.2.2 pyhd8ed1ab_0 conda-forge
foyer 0.12.1 pyhd8ed1ab_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
frozenlist 1.4.1 py311h459d7ec_0 conda-forge
fsspec 2023.12.2 pyhca7485f_0 conda-forge
gast 0.5.4 pyhd8ed1ab_0 conda-forge
gawk 5.3.0 ha916aea_0 conda-forge
gcc_impl_linux-64 11.4.0 h7aa1c59_4 conda-forge
gcc_linux-64 11.4.0 hfd045f2_2 conda-forge
gettext 0.21.1 h27087fc_0 conda-forge
gflags 2.2.2 he1b5a44_1004 conda-forge
gfortran_impl_linux-64 11.4.0 h86428dc_4 conda-forge
gfortran_linux-64 11.4.0 h3047280_2 conda-forge
giflib 5.2.1 h0b41bf4_3 conda-forge
glog 0.6.0 h6f12383_0 conda-forge
gmp 6.3.0 h59595ed_0 conda-forge
gmpy2 2.1.2 py311h6a5fa03_1 conda-forge
gmso 0.9.1 pyhd8ed1ab_0 conda-forge
google-auth 2.27.0 pyhca7485f_0 conda-forge
google-auth-oauthlib 1.2.0 pyhd8ed1ab_0 conda-forge
google-pasta 0.2.0 pyh8c360ce_0 conda-forge
greenlet 3.0.3 py311hb755f60_0 conda-forge
gromacs 2023.3 nompi_h76c6bb2_103 conda-forge
grpcio 1.54.3 py311hcafe171_0 conda-forge
gsl 2.7 he838d99_0 conda-forge
gxx_impl_linux-64 11.4.0 h7aa1c59_4 conda-forge
gxx_linux-64 11.4.0 hfc1ae95_2 conda-forge
h5py 3.10.0 nompi_py311hebc2b07_101 conda-forge
hdf4 4.2.15 h2a13503_7 conda-forge
hdf5 1.14.3 mpi_openmpi_h327c9cf_0 conda-forge
icu 73.2 h59595ed_0 conda-forge
idna 3.6 pyhd8ed1ab_0 conda-forge
importlib-metadata 7.0.1 pyha770c72_0 conda-forge
importlib_metadata 7.0.1 hd8ed1ab_0 conda-forge
importlib_resources 6.1.1 pyhd8ed1ab_0 conda-forge
iniconfig 2.0.0 pyhd8ed1ab_0 conda-forge
ipykernel 6.29.0 pyhd33586a_0 conda-forge
ipython 8.20.0 pyh707e725_0 conda-forge
ipython_genutils 0.2.0 py_1 conda-forge
ipywidgets 8.1.1 pyhd8ed1ab_0 conda-forge
isoduration 20.11.0 pyhd8ed1ab_0 conda-forge
itsdangerous 2.1.2 pyhd8ed1ab_0 conda-forge
jax 0.4.20 pyhd8ed1ab_0 conda-forge
jaxlib 0.4.14 cpu_py311h2be0998_1 conda-forge
jedi 0.19.1 pyhd8ed1ab_0 conda-forge
jinja2 3.1.3 pyhd8ed1ab_0 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.21.1 pyhd8ed1ab_0 conda-forge
jsonschema-specifications 2023.12.1 pyhd8ed1ab_0 conda-forge
jsonschema-with-format-nongpl 4.21.1 pyhd8ed1ab_0 conda-forge
jupyter_client 7.4.9 pyhd8ed1ab_0 conda-forge
jupyter_core 5.7.1 py311h38be061_0 conda-forge
jupyter_events 0.9.0 pyhd8ed1ab_0 conda-forge
jupyter_server 2.12.5 pyhd8ed1ab_0 conda-forge
jupyter_server_fileid 0.9.1 pyhd8ed1ab_0 conda-forge
jupyter_server_terminals 0.5.2 pyhd8ed1ab_0 conda-forge
jupyter_server_ydoc 0.8.0 pyhd8ed1ab_0 conda-forge
jupyter_ydoc 0.2.4 pyhd8ed1ab_0 conda-forge
jupyterlab 3.6.7 pyhd8ed1ab_0 conda-forge
jupyterlab_pygments 0.3.0 pyhd8ed1ab_0 conda-forge
jupyterlab_server 2.25.2 pyhd8ed1ab_0 conda-forge
jupyterlab_widgets 3.0.9 pyhd8ed1ab_0 conda-forge
keras 2.15.0 pyhd8ed1ab_0 conda-forge
kernel-headers_linux-64 2.6.32 he073ed8_16 conda-forge
keyutils 1.6.1 h166bdaf_0 conda-forge
kim-api 2.3.0 h097297d_1 conda-forge
kiwisolver 1.4.5 py311h9547e67_1 conda-forge
krb5 1.21.2 h659d440_0 conda-forge
lammps 2023.11.21 cpu_py311_hbb7bd43_mpi_openmpi_3 conda-forge
lark-parser 0.12.0 pyhd8ed1ab_0 conda-forge
lcms2 2.16 hb7c19ff_0 conda-forge
ld_impl_linux-64 2.40 h41732ed_0 conda-forge
lerc 4.0.0 h27087fc_0 conda-forge
libabseil 20230125.3 cxx17_h59595ed_0 conda-forge
libaec 1.1.2 h59595ed_1 conda-forge
libarrow 12.0.1 hb87d912_8_cpu conda-forge
libblas 3.9.0 16_linux64_mkl conda-forge
libboost 1.82.0 h6fcfa73_6 conda-forge
libboost-python 1.82.0 py311h92ebd52_6 conda-forge
libbrotlicommon 1.0.9 h166bdaf_9 conda-forge
libbrotlidec 1.0.9 h166bdaf_9 conda-forge
libbrotlienc 1.0.9 h166bdaf_9 conda-forge
libcblas 3.9.0 16_linux64_mkl conda-forge
libcrc32c 1.1.2 h9c3ff4c_0 conda-forge
libcurl 8.5.0 hca28451_0 conda-forge
libdeflate 1.19 hd590300_0 conda-forge
libedit 3.1.20191231 he28a2e2_2 conda-forge
libev 4.33 hd590300_2 conda-forge
libevent 2.1.12 hf998b51_1 conda-forge
libexpat 2.5.0 hcb278e6_1 conda-forge
libffi 3.4.2 h7f98852_5 conda-forge
libgcc-devel_linux-64 11.4.0 h922705a_104 conda-forge
libgcc-ng 13.2.0 h807b86a_4 conda-forge
libgfortran-ng 13.2.0 h69a702a_4 conda-forge
libgfortran5 13.2.0 ha4646dd_4 conda-forge
libglib 2.78.3 h783c2da_0 conda-forge
libgomp 13.2.0 h807b86a_4 conda-forge
libgoogle-cloud 2.12.0 hac9eb74_1 conda-forge
libgrpc 1.54.3 hb20ce57_0 conda-forge
libhwloc 2.9.3 default_h554bfaf_1009 conda-forge
libiconv 1.17 hd590300_2 conda-forge
libidn2 2.3.7 hd590300_0 conda-forge
libjpeg-turbo 3.0.0 hd590300_1 conda-forge
liblapack 3.9.0 16_linux64_mkl conda-forge
liblapacke 3.9.0 16_linux64_mkl conda-forge
libnetcdf 4.9.2 mpi_openmpi_h958ee74_13 conda-forge
libnghttp2 1.58.0 h47da74e_1 conda-forge
libnsl 2.0.1 hd590300_0 conda-forge
libnuma 2.0.16 h0b41bf4_1 conda-forge
libpnetcdf 1.12.3 mpi_openmpi_hbcf1124_1 conda-forge
libpng 1.6.39 h753d276_0 conda-forge
libprotobuf 3.21.12 hfc55251_2 conda-forge
libsanitizer 11.4.0 h4dcbe23_4 conda-forge
libsodium 1.0.18 h36c2ea0_1 conda-forge
libsqlite 3.44.2 h2797004_0 conda-forge
libssh2 1.11.0 h0841786_0 conda-forge
libstdcxx-devel_linux-64 11.4.0 h922705a_104 conda-forge
libstdcxx-ng 13.2.0 h7e041cc_4 conda-forge
libthrift 0.18.1 h8fd135c_2 conda-forge
libtiff 4.6.0 ha9c0a0a_2 conda-forge
libunistring 0.9.10 h7f98852_0 conda-forge
libutf8proc 2.8.0 h166bdaf_0 conda-forge
libuuid 2.38.1 h0b41bf4_0 conda-forge
libuv 1.46.0 hd590300_0 conda-forge
libwebp-base 1.3.2 hd590300_0 conda-forge
libxcb 1.15 h0b41bf4_0 conda-forge
libxcrypt 4.4.36 hd590300_1 conda-forge
libxml2 2.12.4 h232c23b_1 conda-forge
libxslt 1.1.39 h76b75d6_0 conda-forge
libzip 1.10.1 h2629f0a_3 conda-forge
libzlib 1.2.13 hd590300_5 conda-forge
lightning-utilities 0.10.1 pyhd8ed1ab_0 conda-forge
llvm-openmp 17.0.6 h4dfa4b3_0 conda-forge
locket 1.0.0 pyhd8ed1ab_0 conda-forge
lxml 5.1.0 py311h9691dec_0 conda-forge
lz4-c 1.9.4 hcb278e6_0 conda-forge
lzo 2.10 h516909a_1000 conda-forge
make 4.3 hd18ef5c_1 conda-forge
markdown 3.5.2 pyhd8ed1ab_0 conda-forge
markdown-it-py 3.0.0 pyhd8ed1ab_0 conda-forge
markupsafe 2.1.4 py311h459d7ec_0 conda-forge
matplotlib-base 3.8.2 py311h54ef318_0 conda-forge
matplotlib-inline 0.1.6 pyhd8ed1ab_0 conda-forge
mbuild 0.16.4 pyhd8ed1ab_0 conda-forge
mda-xdrlib 0.2.0 pyhd8ed1ab_0 conda-forge
mdtraj 1.9.9 py311h90fe790_1 conda-forge
mdurl 0.1.2 pyhd8ed1ab_0 conda-forge
metis 5.1.1 h59595ed_2 conda-forge
mistune 3.0.2 pyhd8ed1ab_0 conda-forge
mkl 2022.2.1 h84fe81f_16997 conda-forge
ml_dtypes 0.2.0 py311h320fe9a_2 conda-forge
mlip 3.0 mpi_openmpi_h7b20f27_1 conda-forge
mpc 1.3.1 hfe3b2da_0 conda-forge
mpfr 4.2.1 h9458935_0 conda-forge
mpi 1.0 openmpi conda-forge
mpmath 1.3.0 pyhd8ed1ab_0 conda-forge
msgpack-python 1.0.7 py311h9547e67_0 conda-forge
multidict 6.0.4 py311h459d7ec_1 conda-forge
munkres 1.1.4 pyh9f0ad1d_0 conda-forge
n2p2 2.2.0 mpi_openmpi_py311_h84d189c_105 conda-forge
nbclassic 1.0.0 pyhb4ecaf3_1 conda-forge
nbclient 0.8.0 pyhd8ed1ab_0 conda-forge
nbconvert 7.14.2 pyhd8ed1ab_0 conda-forge
nbconvert-core 7.14.2 pyhd8ed1ab_0 conda-forge
nbconvert-pandoc 7.14.2 pyhd8ed1ab_0 conda-forge
nbformat 5.9.2 pyhd8ed1ab_0 conda-forge
nbval 0.10.0 pyhd8ed1ab_0 conda-forge
ncurses 6.4 h59595ed_2 conda-forge
nest-asyncio 1.6.0 pyhd8ed1ab_0 conda-forge
netcdf-fortran 4.6.1 mpi_openmpi_hc1a8302_3 conda-forge
networkx 3.2.1 pyhd8ed1ab_0 conda-forge
nglview 3.1.1 pyh15ce09e_0 conda-forge
notebook 6.5.6 pyha770c72_0 conda-forge
notebook-shim 0.2.3 pyhd8ed1ab_0 conda-forge
numexpr 2.8.7 mkl_py311hbaa3ca7_4 conda-forge
numpy 1.26.3 py311h64a7726_0 conda-forge
oauthlib 3.2.2 pyhd8ed1ab_0 conda-forge
ocl-icd 2.3.1 h7f98852_0 conda-forge
ocl-icd-system 1.0.0 1 conda-forge
openeye-toolkits 2023.2.3 py311_0 openeye
openff-amber-ff-ports 0.0.4 pyhca7485f_0 conda-forge
openff-forcefields 2024.01.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-nagl 0.3.1 pyhd8ed1ab_1 conda-forge
openff-nagl-base 0.3.1 pyhd8ed1ab_1 conda-forge
openff-nagl-models 0.1.0 pyhd8ed1ab_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.12 pyhd8ed1ab_0 conda-forge
openjpeg 2.5.0 h488ebb8_3 conda-forge
openmm 8.1.1 py311h6f6ebe4_0 conda-forge
openmmforcefields 0.11.2 pyhd8ed1ab_1 conda-forge
openmpi 4.1.6 h336e698_100 conda-forge
openssl 3.2.1 hd590300_0 conda-forge
opt-einsum 3.3.0 hd8ed1ab_2 conda-forge
opt_einsum 3.3.0 pyhc1e730c_2 conda-forge
orc 1.9.0 h2f23424_1 conda-forge
overrides 7.7.0 pyhd8ed1ab_0 conda-forge
packaging 23.2 pyhd8ed1ab_0 conda-forge
packmol 20.010 h86c2bf4_0 conda-forge
pandas 2.2.0 py311h320fe9a_0 conda-forge
pandoc 3.1.3 h32600fe_0 conda-forge
pandocfilters 1.5.0 pyhd8ed1ab_0 conda-forge
panedr 0.8.0 pyhd8ed1ab_0 conda-forge
parmed 4.2.2 py311hb755f60_1 conda-forge
parso 0.8.3 pyhd8ed1ab_0 conda-forge
partd 1.4.1 pyhd8ed1ab_0 conda-forge
pcre2 10.42 hcad00b1_0 conda-forge
pdbfixer 1.9 pyh1a96a4e_0 conda-forge
perl 5.32.1 7_hd590300_perl5 conda-forge
pexpect 4.9.0 pyhd8ed1ab_0 conda-forge
pickleshare 0.7.5 py_1003 conda-forge
pillow 10.2.0 py311ha6c5da5_0 conda-forge
pint 0.21 pyhd8ed1ab_0 conda-forge
pip 23.3.2 pyhd8ed1ab_0 conda-forge
pixman 0.43.2 h59595ed_0 conda-forge
pkg-config 0.29.2 h36c2ea0_1008 conda-forge
pkgutil-resolve-name 1.3.10 pyhd8ed1ab_1 conda-forge
platformdirs 4.1.0 pyhd8ed1ab_0 conda-forge
pluggy 1.4.0 pyhd8ed1ab_0 conda-forge
plumed 2.8.2 mpi_openmpi_hb0545ae_0 conda-forge
prometheus_client 0.19.0 pyhd8ed1ab_0 conda-forge
prompt-toolkit 3.0.42 pyha770c72_0 conda-forge
protobuf 4.21.12 py311hcafe171_0 conda-forge
psutil 5.9.8 py311h459d7ec_0 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
pyarrow 12.0.1 py311h39c9aba_8_cpu conda-forge
pyasn1 0.5.1 pyhd8ed1ab_0 conda-forge
pyasn1-modules 0.3.0 pyhd8ed1ab_0 conda-forge
pycairo 1.25.1 py311h8feb60e_0 conda-forge
pycparser 2.21 pyhd8ed1ab_0 conda-forge
pydantic 1.10.13 py311h459d7ec_1 conda-forge
pyedr 0.8.0 pyhd8ed1ab_0 conda-forge
pygments 2.17.2 pyhd8ed1ab_0 conda-forge
pyjwt 2.8.0 pyhd8ed1ab_0 conda-forge
pyopenssl 24.0.0 pyhd8ed1ab_0 conda-forge
pyparsing 3.1.1 pyhd8ed1ab_0 conda-forge
pysocks 1.7.1 pyha2e5f31_6 conda-forge
pytables 3.9.2 py311h10c7f7f_1 conda-forge
pytest 8.0.0 pyhd8ed1ab_0 conda-forge
pytest-xdist 3.5.0 pyhd8ed1ab_0 conda-forge
python 3.11.7 hab00c5b_1_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.1 pyhd8ed1ab_0 conda-forge
python-flatbuffers 23.5.26 pyhd8ed1ab_0 conda-forge
python-json-logger 2.0.7 pyhd8ed1ab_0 conda-forge
python-tzdata 2023.4 pyhd8ed1ab_0 conda-forge
python_abi 3.11 4_cp311 conda-forge
pytorch 2.0.0 cpu_mkl_py311hd1ebf82_101 conda-forge
pytorch-lightning 2.1.3 pyhd8ed1ab_0 conda-forge
pytz 2023.4 pyhd8ed1ab_0 conda-forge
pyu2f 0.1.5 pyhd8ed1ab_0 conda-forge
pyyaml 6.0.1 py311h459d7ec_1 conda-forge
pyzmq 24.0.1 py311ha4b6469_1 conda-forge
quippy 0.9.14 py311h4189ce2_0 conda-forge
rdkit 2023.09.4 py311h4c2f14b_0 conda-forge
rdma-core 28.9 h59595ed_1 conda-forge
re2 2023.03.02 h8c504da_0 conda-forge
readline 8.2 h8228510_1 conda-forge
referencing 0.32.1 pyhd8ed1ab_0 conda-forge
reportlab 4.0.9 py311h459d7ec_0 conda-forge
requests 2.31.0 pyhd8ed1ab_0 conda-forge
requests-oauthlib 1.3.1 pyhd8ed1ab_0 conda-forge
rfc3339-validator 0.1.4 pyhd8ed1ab_0 conda-forge
rfc3986-validator 0.1.1 pyh9f0ad1d_0 conda-forge
rhash 1.4.4 hd590300_0 conda-forge
rich 13.7.0 pyhd8ed1ab_0 conda-forge
rlpycairo 0.2.0 pyhd8ed1ab_0 conda-forge
rpds-py 0.17.1 py311h46250e7_0 conda-forge
rsa 4.9 pyhd8ed1ab_0 conda-forge
s2n 1.3.49 h06160fa_0 conda-forge
scipy 1.12.0 py311h64a7726_2 conda-forge
send2trash 1.8.2 pyh41d4057_0 conda-forge
setuptools 69.0.3 pyhd8ed1ab_0 conda-forge
six 1.16.0 pyh6c4a22f_0 conda-forge
sleef 3.5.1 h9b69904_2 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
sortedcontainers 2.4.0 pyhd8ed1ab_0 conda-forge
soupsieve 2.5 pyhd8ed1ab_1 conda-forge
sqlalchemy 2.0.25 py311h459d7ec_0 conda-forge
stack_data 0.6.2 pyhd8ed1ab_0 conda-forge
sympy 1.12 pypyh9d50eac_103 conda-forge
sysroot_linux-64 2.12 he073ed8_16 conda-forge
tbb 2021.11.0 h00ab1b0_1 conda-forge
tblib 3.0.0 pyhd8ed1ab_0 conda-forge
tensorboard 2.15.1 pyhd8ed1ab_0 conda-forge
tensorboard-data-server 0.7.0 py311h63ff55d_1 conda-forge
tensorflow 2.15.0 cpu_py311hd3d7757_0 conda-forge
tensorflow-base 2.15.0 cpu_py311ha0be21f_0 conda-forge
tensorflow-estimator 2.15.0 cpu_py311ha26c8b9_0 conda-forge
termcolor 2.4.0 pyhd8ed1ab_0 conda-forge
terminado 0.18.0 pyh0d859eb_0 conda-forge
tinycss2 1.2.1 pyhd8ed1ab_0 conda-forge
tinydb 4.8.0 pyhd8ed1ab_0 conda-forge
tk 8.6.13 noxft_h4845f30_101 conda-forge
tomli 2.0.1 pyhd8ed1ab_0 conda-forge
toolz 0.12.1 pyhd8ed1ab_0 conda-forge
torchmetrics 1.2.1 pyhd8ed1ab_0 conda-forge
tornado 6.3.3 py311h459d7ec_1 conda-forge
tqdm 4.66.1 pyhd8ed1ab_0 conda-forge
traitlets 5.14.1 pyhd8ed1ab_0 conda-forge
treelib 1.7.0 pyhd8ed1ab_0 conda-forge
types-python-dateutil 2.8.19.20240106 pyhd8ed1ab_0 conda-forge
typing-extensions 4.9.0 hd8ed1ab_0 conda-forge
typing_extensions 4.9.0 pyha770c72_0 conda-forge
typing_utils 0.1.0 pyhd8ed1ab_0 conda-forge
tzdata 2023d h0c530f3_0 conda-forge
ucx 1.14.1 h64cca9d_5 conda-forge
unyt 3.0.1 pyhd8ed1ab_1 conda-forge
uri-template 1.3.0 pyhd8ed1ab_0 conda-forge
urllib3 2.2.0 pyhd8ed1ab_0 conda-forge
validators 0.22.0 pyhd8ed1ab_0 conda-forge
voro 0.4.6 h00ab1b0_0 conda-forge
wcwidth 0.2.13 pyhd8ed1ab_0 conda-forge
webcolors 1.13 pyhd8ed1ab_0 conda-forge
webencodings 0.5.1 pyhd8ed1ab_2 conda-forge
websocket-client 1.7.0 pyhd8ed1ab_0 conda-forge
werkzeug 3.0.1 pyhd8ed1ab_0 conda-forge
wget 1.20.3 ha35d2d1_1 conda-forge
wheel 0.42.0 pyhd8ed1ab_0 conda-forge
widgetsnbextension 4.0.9 pyhd8ed1ab_0 conda-forge
wrapt 1.14.1 py311hd4cff14_1 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
y-py 0.5.9 py311hfe55011_0 conda-forge
yaml 0.2.5 h7f98852_2 conda-forge
yarl 1.9.4 py311h459d7ec_0 conda-forge
ypy-websocket 0.8.2 pyhd8ed1ab_0 conda-forge
zeromq 4.3.5 h59595ed_0 conda-forge
zict 3.0.0 pyhd8ed1ab_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