Repository: openforcefield/openff-nagl

Issue:
NAGL charge assignment applying global warnings filter
## Expected behavior ##

A global warnings filter shouldn't be inherited from library calls.

## Actual behavior ##

Getting charges through NAGL appears to be adding a `('ignore', None, <class 'Warning'>, None, 0)` warnings filter.

As far as I'm aware this seems to be NAGL specific (neither the RDKit or OEChem backends are causing this).

## Code to reproduce the behavior ##

``` python
import warnings
from openff.toolkit.utils.nagl_wrapper import NAGLToolkitWrapper
from openff.toolkit import Molecule
warnings.warn('foo')
mol = Molecule.from_smiles('CCC')
mol.assign_partial_charges(partial_charge_method='openff-gnn-am1bcc-0.1.0-rc.1.pt', toolkit_registry=NAGLToolkitWrapper())
warnings.warn('foo')

>> only one 'foo' warning is emitted

print(warnings.filters)

>> [('ignore', None, <class 'Warning'>, None, 0), ('ignore', re.compile('torch.distributed.reduce_op is deprecated, please use torch.distributed.ReduceOp instead', re.IGNORECASE), <class 'Warning'>, None, 0), ('default', None, <class 'lightning_fabric.utilities.rank_zero.LightningDeprecationWarning'>, None, 0), ('once', None, <class 'sympy.utilities.exceptions.SymPyDeprecationWarning'>, None, 0), ('ignore', None, <class 'torch.jit._trace.TracerWarning'>, re.compile('torch.(?!jit)'), 0), ('always', None, <class 'scipy.special._sf_error.SpecialFunctionWarning'>, None, 0), ('ignore', re.compile('the matrix subclass is not the recommended way', re.IGNORECASE), <class 'Warning'>, None, 0), ('ignore', re.compile('numpy.ndarray size changed', re.IGNORECASE), <class 'Warning'>, None, 0), ('ignore', re.compile('numpy.ufunc size changed', re.IGNORECASE), <class 'Warning'>, None, 0), ('ignore', re.compile('numpy.dtype size changed', re.IGNORECASE), <class 'Warning'>, None, 0), ('always', None, <class 'numpy.RankWarning'>, None, 0), ('error', None, <class 'IPython.core.completer.ProvisionalCompleterWarning'>, None, 0), ('default', None, <class 'DeprecationWarning'>, '__main__', 0), ('ignore', None, <class 'DeprecationWarning'>, None, 0), ('ignore', None, <class 'PendingDeprecationWarning'>, None, 0), ('ignore', None, <class 'ImportWarning'>, None, 0), ('ignore', None, <class 'ResourceWarning'>, None, 0), ('ignore', None, <class 'pkg_resources.PEP440Warning'>, None, 0)]
```

## Current environment ##

- NAGL version 0.3.1
- Toolkit version 0.14.4
- Which version of Python (`python -V`)? 3.10.12
- Which operating system? Ubuntu 22.04.3 LTS
- What is the output of `pip list`?

```
Package                       Version
----------------------------- ----------------------------
AmberUtils                    21.0
annotated-types               0.6.0
anyio                         4.0.0
argon2-cffi                   23.1.0
argon2-cffi-bindings          21.2.0
arrow                         1.3.0
asttokens                     2.4.0
astunparse                    1.6.3
async-lru                     2.0.4
attrs                         23.1.0
Babel                         2.13.1
backcall                      0.2.0
backports.functools-lru-cache 1.6.5
beautifulsoup4                4.12.2
bleach                        6.1.0
Brotli                        1.1.0
bson                          0.5.9
cached-property               1.5.2
cachetools                    5.3.2
certifi                       2023.7.22
cffi                          1.16.0
charset-normalizer            3.3.1
click                         8.1.7
click-option-group            0.5.6
colorama                      0.4.6
comm                          0.1.4
contourpy                     1.1.1
cycler                        0.12.1
debugpy                       1.8.0
decorator                     5.1.1
defusedxml                    0.7.1
edgembar                      0.2
entrypoints                   0.4
exceptiongroup                1.1.3
executing                     1.2.0
fastjsonschema                2.18.1
filelock                      3.12.4
fonttools                     4.43.1
fqdn                          1.5.1
freetype-py                   2.3.0
fsspec                        2023.10.0
gmpy2                         2.1.2
greenlet                      3.0.0
idna                          3.4
importlib-metadata            6.8.0
importlib-resources           6.1.0
ipykernel                     6.25.2
ipython                       8.16.1
ipywidgets                    8.1.1
isoduration                   20.11.0
jedi                          0.19.1
Jinja2                        3.1.2
joblib                        1.3.2
json5                         0.9.14
jsonpointer                   2.4
jsonschema                    4.19.1
jsonschema-specifications     2023.7.1
jupyter_client                8.5.0
jupyter_core                  5.4.0
jupyter-events                0.8.0
jupyter-lsp                   2.2.0
jupyter_server                2.8.0
jupyter_server_terminals      0.4.4
jupyterlab                    4.0.7
jupyterlab-pygments           0.2.2
jupyterlab_server             2.25.0
jupyterlab-widgets            3.0.9
kiwisolver                    1.4.5
lightning-utilities           0.9.0
markdown-it-py                3.0.0
MarkupSafe                    2.1.3
matplotlib                    3.8.0
matplotlib-inline             0.1.6
mda-xdrlib                    0.2.0
mdtraj                        1.9.9
mdurl                         0.1.0
mistune                       3.0.1
MMPBSA.py                     16.0
mpmath                        1.3.0
munkres                       1.1.4
nbclient                      0.8.0
nbconvert                     7.9.2
nbformat                      5.9.2
ndfes                         1.8
nest-asyncio                  1.5.8
networkx                      3.2
notebook                      7.0.6
notebook_shim                 0.2.3
numexpr                       2.8.7
numpy                         1.26.0
openff-amber-ff-ports         0+untagged.24.gf33b5cd.dirty
openff-interchange            0.3.16
openff-models                 0.1.1
openff-nagl                   0.3.1
openff-nagl-models            0.1.0
openff-toolkit                0.14.4
openff-units                  0.2.1
openff-utilities              0.1.11
openforcefields               0+untagged.62.gd9a8c64.dirty
OpenMM                        8.0.0
overrides                     7.4.0
packaging                     23.2
packmol-memgen                2023.2.24
pandas                        2.1.1
pandocfilters                 1.5.0
panedr                        0.7.2
ParmEd                        4.2.2
parso                         0.8.3
pbr                           5.11.1
pdb4amber                     22.0
pexpect                       4.8.0
pickleshare                   0.7.5
Pillow                        10.1.0
Pint                          0.21
pip                           23.3.1
pkgutil_resolve_name          1.3.10
platformdirs                  3.11.0
prometheus-client             0.17.1
prompt-toolkit                3.0.39
psutil                        5.9.5
ptyprocess                    0.7.0
pure-eval                     0.2.2
py-cpuinfo                    9.0.0
pyarrow                       13.0.0
pycairo                       1.25.1
pycparser                     2.21
pydantic                      2.4.2
pydantic_core                 2.10.1
pyedr                         0.7.2
Pygments                      2.16.1
pyMSMT                        22.0
pyparsing                     3.1.1
PySocks                       1.7.1
python-constraint             1.4.0
python-dateutil               2.8.2
python-json-logger            2.0.7
pytorch-lightning             2.1.0
pytraj                        2.0.6
pytz                          2023.3.post1
PyYAML                        6.0.1
pyzmq                         25.1.1
referencing                   0.30.2
reportlab                     4.0.6
requests                      2.31.0
rfc3339-validator             0.1.4
rfc3986-validator             0.1.1
rich                          13.6.0
rlPyCairo                     0.2.0
rpds-py                       0.10.6
sander                        22.0
scipy                         1.11.3
Send2Trash                    1.8.2
setuptools                    68.2.2
six                           1.16.0
smirnoff99frosst              0+unknown
sniffio                       1.3.0
soupsieve                     2.5
SQLAlchemy                    2.0.22
stack-data                    0.6.2
sympy                         1.12
tables                        3.9.1
terminado                     0.17.1
tinycss2                      1.2.1
tomli                         2.0.1
torch                         2.0.0.post3
torchmetrics                  1.2.0
tornado                       6.3.3
tqdm                          4.66.1
traitlets                     5.12.0
types-python-dateutil         2.8.19.14
typing_extensions             4.8.0
typing-utils                  0.1.0
tzdata                        2023.3
unicodedata2                  15.1.0
uri-template                  1.3.0
urllib3                       2.0.7
wcwidth                       0.2.8
webcolors                     1.13
webencodings                  0.5.1
websocket-client              1.6.4
wheel                         0.41.2
widgetsnbextension            4.0.9
xmltodict                     0.13.0
zipp                          3.17.0
```

- If you use conda, what is the output of `conda list`?

```
# packages in environment at /home/ialibay/software/mambaforge/install/envs/openff-tk-14:
#
# Name                    Version                   Build  Channel
_libgcc_mutex             0.1                 conda_forge    conda-forge
_openmp_mutex             4.5                       2_gnu    conda-forge
ambertools                23.3            py310h05519df_4    conda-forge
amberutils                21.0                     pypi_0    pypi
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          py310h2372a71_4    conda-forge
arpack                    3.8.0           nompi_h0baa96a_101    conda-forge
arrow                     1.3.0              pyhd8ed1ab_0    conda-forge
asttokens                 2.4.0              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
aws-c-auth                0.7.4                h1a24852_6    conda-forge
aws-c-cal                 0.6.7                h6e18cf3_0    conda-forge
aws-c-common              0.9.4                hd590300_0    conda-forge
aws-c-compression         0.2.17               h037bafe_4    conda-forge
aws-c-event-stream        0.3.2                he4fbe49_4    conda-forge
aws-c-http                0.7.13               hbbfb9a7_7    conda-forge
aws-c-io                  0.13.35              hd1885a1_4    conda-forge
aws-c-mqtt                0.9.8                h31a96f8_0    conda-forge
aws-c-s3                  0.3.19               hb128593_1    conda-forge
aws-c-sdkutils            0.1.12               h037bafe_3    conda-forge
aws-checksums             0.1.17               h037bafe_3    conda-forge
aws-crt-cpp               0.24.3               h53d10bb_7    conda-forge
aws-sdk-cpp               1.11.182             h58fcd1b_1    conda-forge
babel                     2.13.1             pyhd8ed1ab_0    conda-forge
backcall                  0.2.0              pyh9f0ad1d_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           py310hc6cd4ac_1    conda-forge
bson                      0.5.9                      py_0    conda-forge
bzip2                     1.0.8                h7f98852_4    conda-forge
c-ares                    1.20.1               hd590300_1    conda-forge
c-blosc2                  2.10.5               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          py310h2fee648_0    conda-forge
charset-normalizer        3.3.1              pyhd8ed1ab_0    conda-forge
click                     8.1.7           unix_pyh707e725_0    conda-forge
click-option-group        0.5.6              pyhd8ed1ab_0    conda-forge
colorama                  0.4.6              pyhd8ed1ab_0    conda-forge
comm                      0.1.4              pyhd8ed1ab_0    conda-forge
contourpy                 1.1.1           py310hd41b1e2_1    conda-forge
cudatoolkit               11.8.0              h4ba93d1_12    conda-forge
cycler                    0.12.1             pyhd8ed1ab_0    conda-forge
debugpy                   1.8.0           py310hc6cd4ac_1    conda-forge
decorator                 5.1.1              pyhd8ed1ab_0    conda-forge
defusedxml                0.7.1              pyhd8ed1ab_0    conda-forge
edgembar                  0.2                      pypi_0    pypi
entrypoints               0.4                pyhd8ed1ab_0    conda-forge
exceptiongroup            1.1.3              pyhd8ed1ab_0    conda-forge
executing                 1.2.0              pyhd8ed1ab_0    conda-forge
expat                     2.5.0                hcb278e6_1    conda-forge
fftw                      3.3.10          nompi_hc118613_108    conda-forge
filelock                  3.12.4             pyhd8ed1ab_0    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.43.1          py310h2372a71_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
fsspec                    2023.10.0          pyhca7485f_0    conda-forge
gettext                   0.21.1               h27087fc_0    conda-forge
gflags                    2.2.2             he1b5a44_1004    conda-forge
glog                      0.6.0                h6f12383_0    conda-forge
gmp                       6.2.1                h58526e2_0    conda-forge
gmpy2                     2.1.2           py310h3ec546c_1    conda-forge
greenlet                  3.0.0           py310hc6cd4ac_1    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.0              pyhd8ed1ab_0    conda-forge
ipykernel                 6.25.2             pyh2140261_0    conda-forge
ipython                   8.16.1             pyh0d859eb_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             py310hff52083_3    conda-forge
jsonschema                4.19.1             pyhd8ed1ab_0    conda-forge
jsonschema-specifications 2023.7.1           pyhd8ed1ab_0    conda-forge
jsonschema-with-format-nongpl 4.19.1             pyhd8ed1ab_0    conda-forge
jupyter-lsp               2.2.0              pyhd8ed1ab_0    conda-forge
jupyter_client            8.5.0              pyhd8ed1ab_0    conda-forge
jupyter_core              5.4.0           py310hff52083_0    conda-forge
jupyter_events            0.8.0              pyhd8ed1ab_0    conda-forge
jupyter_server            2.8.0              pyhd8ed1ab_0    conda-forge
jupyter_server_terminals  0.4.4              pyhd8ed1ab_1    conda-forge
jupyterlab                4.0.7              pyhd8ed1ab_0    conda-forge
jupyterlab_pygments       0.2.2              pyhd8ed1ab_0    conda-forge
jupyterlab_server         2.25.0             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           py310hd41b1e2_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
libabseil                 20230802.1      cxx17_h59595ed_0    conda-forge
libaec                    1.1.2                h59595ed_1    conda-forge
libarrow                  13.0.0          he1fec18_11_cpu    conda-forge
libblas                   3.9.0           19_linux64_openblas    conda-forge
libboost                  1.82.0               h6fcfa73_6    conda-forge
libboost-python           1.82.0          py310hcb52e73_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
libcrc32c                 1.1.2                h9c3ff4c_0    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
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-ng                 13.2.0               h807b86a_2    conda-forge
libgfortran-ng            13.2.0               h69a702a_2    conda-forge
libgfortran5              13.2.0               ha4646dd_2    conda-forge
libglib                   2.78.0               hebfc3b9_0    conda-forge
libgomp                   13.2.0               h807b86a_2    conda-forge
libgoogle-cloud           2.12.0               h19a6dae_3    conda-forge
libgrpc                   1.58.1               he06187c_2    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.52.0               h61bc06f_0    conda-forge
libnsl                    2.0.1                hd590300_0    conda-forge
libnuma                   2.0.16               h0b41bf4_1    conda-forge
libopenblas               0.3.24          pthreads_h413a1c8_0    conda-forge
libpng                    1.6.39               h753d276_0    conda-forge
libprotobuf               4.24.3               hf27288f_1    conda-forge
libre2-11                 2023.06.02           h7a70373_0    conda-forge
libsodium                 1.0.18               h36c2ea0_1    conda-forge
libsqlite                 3.43.2               h2797004_0    conda-forge
libssh2                   1.11.0               h0841786_0    conda-forge
libstdcxx-ng              13.2.0               h7e041cc_2    conda-forge
libthrift                 0.19.0               hb90f79a_1    conda-forge
libtiff                   4.6.0                ha9c0a0a_2    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
libxml2                   2.11.5               h232c23b_1    conda-forge
libzip                    1.10.1               h2629f0a_3    conda-forge
libzlib                   1.2.13               hd590300_5    conda-forge
lightning-utilities       0.9.0              pyhd8ed1ab_0    conda-forge
lz4-c                     1.9.4                hcb278e6_0    conda-forge
lzo                       2.10              h516909a_1000    conda-forge
markdown-it-py            3.0.0              pyhd8ed1ab_0    conda-forge
markupsafe                2.1.3           py310h2372a71_1    conda-forge
matplotlib-base           3.8.0           py310h62c0568_2    conda-forge
matplotlib-inline         0.1.6              pyhd8ed1ab_0    conda-forge
mda-xdrlib                0.2.0              pyhd8ed1ab_0    conda-forge
mdtraj                    1.9.9           py310h8e08b51_0    conda-forge
mdurl                     0.1.0              pyhd8ed1ab_0    conda-forge
mistune                   3.0.1              pyhd8ed1ab_0    conda-forge
mmpbsa-py                 16.0                     pypi_0    pypi
mpc                       1.3.1                hfe3b2da_0    conda-forge
mpfr                      4.2.1                h9458935_0    conda-forge
mpmath                    1.3.0              pyhd8ed1ab_0    conda-forge
munkres                   1.1.4              pyh9f0ad1d_0    conda-forge
nbclient                  0.8.0              pyhd8ed1ab_0    conda-forge
nbconvert-core            7.9.2              pyhd8ed1ab_0    conda-forge
nbformat                  5.9.2              pyhd8ed1ab_0    conda-forge
ncurses                   6.4                  hcb278e6_0    conda-forge
nest-asyncio              1.5.8              pyhd8ed1ab_0    conda-forge
netcdf-fortran            4.6.1           nompi_hacb5139_102    conda-forge
networkx                  3.2                pyhd8ed1ab_1    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           py310hc2d3c2e_104    conda-forge
numpy                     1.26.0          py310hb13e2d6_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.3              pyh6c4a22f_0    conda-forge
openff-forcefields        2023.08.0          pyh1a96a4e_0    conda-forge
openff-interchange        0.3.16             pyhd8ed1ab_0    conda-forge
openff-interchange-base   0.3.16             pyhd8ed1ab_0    conda-forge
openff-models             0.1.1              pyhca7485f_0    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.4             pyhd8ed1ab_1    conda-forge
openff-toolkit-base       0.14.4             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           py310h4812340_3    conda-forge
openssl                   3.1.4                hd590300_0    conda-forge
orc                       1.9.0                h208142c_3    conda-forge
overrides                 7.4.0              pyhd8ed1ab_0    conda-forge
packaging                 23.2               pyhd8ed1ab_0    conda-forge
packmol                   20.010               h86c2bf4_0    conda-forge
packmol-memgen            2023.2.24                pypi_0    pypi
pandas                    2.1.1           py310hcc13569_1    conda-forge
pandocfilters             1.5.0              pyhd8ed1ab_0    conda-forge
panedr                    0.7.2              pyhd8ed1ab_0    conda-forge
parmed                    4.2.2           py310hc6cd4ac_0    conda-forge
parso                     0.8.3              pyhd8ed1ab_0    conda-forge
pbr                       5.11.1             pyhd8ed1ab_0    conda-forge
pcre2                     10.40                hc3806b6_0    conda-forge
pdb4amber                 22.0                     pypi_0    pypi
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          py310h01dd4db_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              3.11.0             pyhd8ed1ab_0    conda-forge
prometheus_client         0.17.1             pyhd8ed1ab_0    conda-forge
prompt-toolkit            3.0.39             pyha770c72_0    conda-forge
prompt_toolkit            3.0.39               hd8ed1ab_0    conda-forge
psutil                    5.9.5           py310h2372a71_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
pyarrow                   13.0.0          py310hf9e7431_11_cpu    conda-forge
pycairo                   1.25.1          py310hda9f760_0    conda-forge
pycparser                 2.21               pyhd8ed1ab_0    conda-forge
pydantic                  2.4.2              pyhd8ed1ab_1    conda-forge
pydantic-core             2.10.1          py310hcb5633a_0    conda-forge
pyedr                     0.7.2              pyhd8ed1ab_0    conda-forge
pygments                  2.16.1             pyhd8ed1ab_0    conda-forge
pymsmt                    22.0                     pypi_0    pypi
pyparsing                 3.1.1              pyhd8ed1ab_0    conda-forge
pysocks                   1.7.1              pyha2e5f31_6    conda-forge
pytables                  3.9.1           py310h374b01c_0    conda-forge
python                    3.10.12         hd12c33a_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.18.1             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.10                    4_cp310    conda-forge
pytorch                   2.0.0           cpu_generic_py310he67e19a_3    conda-forge
pytorch-lightning         2.1.0              pyhd8ed1ab_0    conda-forge
pytraj                    2.0.6                    pypi_0    pypi
pytz                      2023.3.post1       pyhd8ed1ab_0    conda-forge
pyyaml                    6.0.1           py310h2372a71_1    conda-forge
pyzmq                     25.1.1          py310h795f18f_2    conda-forge
rdkit                     2023.09.1       py310hb79e901_0    conda-forge
rdma-core                 28.9                 h59595ed_1    conda-forge
re2                       2023.06.02           h2873b5e_0    conda-forge
readline                  8.2                  h8228510_1    conda-forge
referencing               0.30.2             pyhd8ed1ab_0    conda-forge
reportlab                 4.0.6           py310h2372a71_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
rich                      13.6.0             pyhd8ed1ab_0    conda-forge
rlpycairo                 0.2.0              pyhd8ed1ab_0    conda-forge
rpds-py                   0.10.6          py310hcb5633a_0    conda-forge
s2n                       1.3.55               h06160fa_0    conda-forge
sander                    22.0                     pypi_0    pypi
scipy                     1.11.3          py310hb13e2d6_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
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
soupsieve                 2.5                pyhd8ed1ab_1    conda-forge
sqlalchemy                2.0.22          py310h2372a71_0    conda-forge
stack_data                0.6.2              pyhd8ed1ab_0    conda-forge
sympy                     1.12            pypyh9d50eac_103    conda-forge
terminado                 0.17.1             pyh41d4057_0    conda-forge
tinycss2                  1.2.1              pyhd8ed1ab_0    conda-forge
tk                        8.6.13               h2797004_0    conda-forge
tomli                     2.0.1              pyhd8ed1ab_0    conda-forge
torchmetrics              1.2.0              pyhd8ed1ab_0    conda-forge
tornado                   6.3.3           py310h2372a71_1    conda-forge
tqdm                      4.66.1             pyhd8ed1ab_0    conda-forge
traitlets                 5.12.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
ucx                       1.15.0               h64cca9d_0    conda-forge
unicodedata2              15.1.0          py310h2372a71_0    conda-forge
uri-template              1.3.0              pyhd8ed1ab_0    conda-forge
urllib3                   2.0.7              pyhd8ed1ab_0    conda-forge
wcwidth                   0.2.8              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.2             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
```

Discussion:
lilyminium: Turns out 0.14.4 is out now and that has stopped throwing up tons of warnings when allow_undefined_stereo=True, so `with capture_toolkit_warnings` isn't absolutely needed anymore -- stripping from the rest of the library.
codecov-commenter: ## [Codecov](https://app.codecov.io/gh/openforcefield/openff-nagl/pull/65?src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=openforcefield) Report
> Merging [#65](https://app.codecov.io/gh/openforcefield/openff-nagl/pull/65?src=pr&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=openforcefield) (725a0a0) into [main](https://app.codecov.io/gh/openforcefield/openff-nagl/commit/3a7acc180399232d93eaaa233e5301995e829c43?el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=openforcefield) (3a7acc1) will **decrease** coverage by `2.65%`.
> The diff coverage is `75.00%`.

<details><summary>Additional details and impacted files</summary>


</details>

Patch:
diff --git a/openff/nagl/label/_label.py b/openff/nagl/label/_label.py
index 0569331..8351949 100644
--- a/openff/nagl/label/_label.py
+++ b/openff/nagl/label/_label.py
@@ -105,25 +105,24 @@ class LabelConformers(_BaseLabel):
             self.n_conformer_column: [],
         }
 
-        with capture_toolkit_warnings():
-            for smiles in batch_smiles:
-                mol = Molecule.from_mapped_smiles(
-                    smiles,
-                    allow_undefined_stereo=True
-                )
-                mol.generate_conformers(
-                    n_conformers=self.n_conformer_pool,
-                    rms_cutoff=rms_cutoff, 
-                )
-                mol.apply_elf_conformer_selection(
-                    limit=self.n_conformers,
-                )
-                conformers = np.ravel([
-                    conformer.m_as(unit.angstrom)
-                    for conformer in mol.conformers
-                ])
-                data[self.conformer_column].append(conformers)
-                data[self.n_conformer_column].append(len(mol.conformers))
+        for smiles in batch_smiles:
+            mol = Molecule.from_mapped_smiles(
+                smiles,
+                allow_undefined_stereo=True
+            )
+            mol.generate_conformers(
+                n_conformers=self.n_conformer_pool,
+                rms_cutoff=rms_cutoff, 
+            )
+            mol.apply_elf_conformer_selection(
+                limit=self.n_conformers,
+            )
+            conformers = np.ravel([
+                conformer.m_as(unit.angstrom)
+                for conformer in mol.conformers
+            ])
+            data[self.conformer_column].append(conformers)
+            data[self.n_conformer_column].append(len(mol.conformers))
         
         conformer_field = pa.field(
             self.conformer_column, pa.list_(pa.float64())
diff --git a/openff/nagl/label/labels.py b/openff/nagl/label/labels.py
index 4e3b1ef..13851ea 100644
--- a/openff/nagl/label/labels.py
+++ b/openff/nagl/label/labels.py
@@ -66,7 +66,6 @@ class LabelConformers(_BaseLabel):
         verbose: bool = False,
     ):
         from openff.toolkit import Molecule
-        from openff.nagl.toolkits.openff import capture_toolkit_warnings
 
         rms_cutoff = self.rms_cutoff
         if not isinstance(rms_cutoff, unit.Quantity):
@@ -84,25 +83,24 @@ class LabelConformers(_BaseLabel):
             self.n_conformer_column: [],
         }
 
-        with capture_toolkit_warnings():
-            for smiles in batch_smiles:
-                mol = Molecule.from_mapped_smiles(
-                    smiles,
-                    allow_undefined_stereo=True
-                )
-                mol.generate_conformers(
-                    n_conformers=self.n_conformer_pool,
-                    rms_cutoff=rms_cutoff, 
-                )
-                mol.apply_elf_conformer_selection(
-                    limit=self.n_conformers,
-                )
-                conformers = np.ravel([
-                    conformer.m_as(unit.angstrom)
-                    for conformer in mol.conformers
-                ])
-                data[self.conformer_column].append(conformers)
-                data[self.n_conformer_column].append(len(mol.conformers))
+        for smiles in batch_smiles:
+            mol = Molecule.from_mapped_smiles(
+                smiles,
+                allow_undefined_stereo=True
+            )
+            mol.generate_conformers(
+                n_conformers=self.n_conformer_pool,
+                rms_cutoff=rms_cutoff, 
+            )
+            mol.apply_elf_conformer_selection(
+                limit=self.n_conformers,
+            )
+            conformers = np.ravel([
+                conformer.m_as(unit.angstrom)
+                for conformer in mol.conformers
+            ])
+            data[self.conformer_column].append(conformers)
+            data[self.n_conformer_column].append(len(mol.conformers))
         
         conformer_field = pa.field(
             self.conformer_column, pa.list_(pa.float64())
@@ -140,37 +138,35 @@ class LabelCharges(_BaseLabel):
         use_existing_conformers: bool = False,
     ) -> np.ndarray:
         from openff.toolkit import Molecule
-        from openff.nagl.toolkits.openff import capture_toolkit_warnings
 
-        with capture_toolkit_warnings():
-            mol = Molecule.from_mapped_smiles(
-                mapped_smiles,
-                allow_undefined_stereo=True
-            )
-            shape = (-1, mol.n_atoms, 3)
-            if use_existing_conformers:
-                if conformers is None:
-                    raise ValueError(
-                        "Conformers must be provided "
-                        "if `use_existing_conformers` is True"
-                    )
-                if not isinstance(conformers, unit.Quantity):
-                    conformers = np.asarray(conformers) * unit.angstrom
-                conformers = conformers.reshape(shape)
-
-                charges = []
-                for conformer in conformers:
-                    mol.assign_partial_charges(
-                        charge_method,
-                        use_conformers=[conformer],
-                    )
-                    charges.append(
-                        mol.partial_charges.m_as(unit.elementary_charge)
-                    )
-                return np.mean(charges, axis=0)
-            else:
-                mol.assign_partial_charges(charge_method)
-                return mol.partial_charges.m_as(unit.elementary_charge)
+        mol = Molecule.from_mapped_smiles(
+            mapped_smiles,
+            allow_undefined_stereo=True
+        )
+        shape = (-1, mol.n_atoms, 3)
+        if use_existing_conformers:
+            if conformers is None:
+                raise ValueError(
+                    "Conformers must be provided "
+                    "if `use_existing_conformers` is True"
+                )
+            if not isinstance(conformers, unit.Quantity):
+                conformers = np.asarray(conformers) * unit.angstrom
+            conformers = conformers.reshape(shape)
+
+            charges = []
+            for conformer in conformers:
+                mol.assign_partial_charges(
+                    charge_method,
+                    use_conformers=[conformer],
+                )
+                charges.append(
+                    mol.partial_charges.m_as(unit.elementary_charge)
+                )
+            return np.mean(charges, axis=0)
+        else:
+            mol.assign_partial_charges(charge_method)
+            return mol.partial_charges.m_as(unit.elementary_charge)
             
     def apply(
         self,
@@ -265,13 +261,11 @@ class LabelMultipleESPs(_BaseLabel):
     ) -> typing.List[np.ndarray]:
         from openff.toolkit import Molecule
         from openff.recharge.grids import GridGenerator, MSKGridSettings
-        from openff.nagl.toolkits.openff import capture_toolkit_warnings
 
-        with capture_toolkit_warnings():
-            mol = Molecule.from_mapped_smiles(
-                mapped_smiles,
-                allow_undefined_stereo=True
-            )
+        mol = Molecule.from_mapped_smiles(
+            mapped_smiles,
+            allow_undefined_stereo=True
+        )
 
         settings = MSKGridSettings()
 
diff --git a/openff/nagl/molecule/_base.py b/openff/nagl/molecule/_base.py
index dd4ed67..322a4d6 100644
--- a/openff/nagl/molecule/_base.py
+++ b/openff/nagl/molecule/_base.py
@@ -90,14 +90,10 @@ class MoleculeMixin:
     
     def to_openff(self):
         from openff.toolkit.topology import Molecule
-        from openff.nagl.toolkits.openff import capture_toolkit_warnings
-
-        with capture_toolkit_warnings():
-            molecule = Molecule.from_mapped_smiles(
-                self.mapped_smiles,
-                allow_undefined_stereo=True,
-            )
-        
+        molecule = Molecule.from_mapped_smiles(
+            self.mapped_smiles,
+            allow_undefined_stereo=True,
+        )
         return molecule
 
 
diff --git a/openff/nagl/molecule/_dgl/molecule.py b/openff/nagl/molecule/_dgl/molecule.py
index 2c30952..0330353 100644
--- a/openff/nagl/molecule/_dgl/molecule.py
+++ b/openff/nagl/molecule/_dgl/molecule.py
@@ -55,7 +55,6 @@ class DGLMolecule(MoleculeMixin, DGLBase):
         include_all_transfer_pathways: bool = False,
     ):
         import dgl
-        from openff.nagl.toolkits.openff import capture_toolkit_warnings
         from openff.nagl.utils.resonance import ResonanceEnumerator
 
         if atom_features is None:
@@ -106,8 +105,7 @@ class DGLMolecule(MoleculeMixin, DGLBase):
             }
         )
 
-        with capture_toolkit_warnings():
-            mapped_smiles = offmols[0].to_smiles(mapped=True)
+        mapped_smiles = offmols[0].to_smiles(mapped=True)
 
         return cls(
             graph=graph,
diff --git a/openff/nagl/molecule/_graph/molecule.py b/openff/nagl/molecule/_graph/molecule.py
index 1afbbf4..fd71d5b 100644
--- a/openff/nagl/molecule/_graph/molecule.py
+++ b/openff/nagl/molecule/_graph/molecule.py
@@ -35,7 +35,6 @@ class GraphMolecule(MoleculeMixin, NAGLMoleculeBase):
         max_path_length: Optional[int] = None,
         include_all_transfer_pathways: bool = False,
     ):
-        from openff.nagl.toolkits.openff import capture_toolkit_warnings
         from openff.nagl.utils.resonance import ResonanceEnumerator
 
         offmols = [molecule]
@@ -57,8 +56,7 @@ class GraphMolecule(MoleculeMixin, NAGLMoleculeBase):
         ]
         graph = NXMolHeteroGraph._batch(graphs)
 
-        with capture_toolkit_warnings():
-            mapped_smiles = molecule.to_smiles(mapped=True)
+        mapped_smiles = molecule.to_smiles(mapped=True)
 
         return cls(
             graph=graph,
diff --git a/openff/nagl/nn/_dataset.py b/openff/nagl/nn/_dataset.py
index 248d85a..deeae0f 100644
--- a/openff/nagl/nn/_dataset.py
+++ b/openff/nagl/nn/_dataset.py
@@ -195,13 +195,11 @@ class DGLMoleculeDatasetEntry(typing.NamedTuple):
             be provided as it will be ignored.
         """
         from openff.toolkit import Molecule
-        from openff.nagl.toolkits.openff import capture_toolkit_warnings
 
-        with capture_toolkit_warnings():
-            molecule = Molecule.from_mapped_smiles(
-                mapped_smiles,
-                allow_undefined_stereo=True,
-            )
+        molecule = Molecule.from_mapped_smiles(
+            mapped_smiles,
+            allow_undefined_stereo=True,
+        )
         return cls.from_openff(
             molecule,
             labels,
@@ -237,18 +235,16 @@ class DGLMoleculeDatasetEntry(typing.NamedTuple):
         smiles_column: str = "mapped_smiles",
     ):
         from openff.toolkit import Molecule
-        from openff.nagl.toolkits.openff import capture_toolkit_warnings
 
         labels = dict(row)
         mapped_smiles = labels.pop(smiles_column)
         atom_features = labels.pop(atom_feature_column)
         bond_features = labels.pop(bond_feature_column)
 
-        with capture_toolkit_warnings():
-            molecule = Molecule.from_mapped_smiles(
-                mapped_smiles,
-                allow_undefined_stereo=True,
-            )
+        molecule = Molecule.from_mapped_smiles(
+            mapped_smiles,
+            allow_undefined_stereo=True,
+        )
 
         if atom_features is not None:
             atom_features = torch.tensor(atom_features).float()
@@ -446,8 +442,6 @@ class DGLMoleculeDataset(Dataset):
         columns: typing.Optional[typing.List[str]] = None,
         n_processes: int = 0,
     ):
-        from openff.nagl.toolkits.openff import capture_toolkit_warnings
-
         if columns is not None:
             columns = list(columns)
             if smiles_column not in columns:
@@ -481,9 +475,8 @@ class DGLMoleculeDataset(Dataset):
             input_dataset.to_batches(columns=columns),
             desc="Featurizing dataset",
         ):
-            with capture_toolkit_warnings():
-                for row in tqdm.tqdm(input_batch.to_pylist(), desc="Featurizing batch"):
-                    entries.append(converter(row))
+            for row in tqdm.tqdm(input_batch.to_pylist(), desc="Featurizing batch"):
+                entries.append(converter(row))
             # with get_mapper_to_processes(n_processes=n_processes) as mapper:
             #     row_entries = list(mapper(converter, input_batch.to_pylist()))
             #     entries.extend(row_entries)
diff --git a/openff/nagl/toolkits/openff.py b/openff/nagl/toolkits/openff.py
index b52a500..257ccf4 100644
--- a/openff/nagl/toolkits/openff.py
+++ b/openff/nagl/toolkits/openff.py
@@ -93,8 +93,6 @@ def capture_toolkit_warnings(run: bool = True):  # pragma: no cover
         yield
         return
 
-    warnings.filterwarnings("ignore")
-
     toolkit_logger = logging.getLogger("openff.toolkit")
     openff_logger_level = toolkit_logger.getEffectiveLevel()
     toolkit_logger.setLevel(logging.ERROR)
@@ -634,9 +632,8 @@ def smiles_to_inchi_key(smiles: str) -> str:
 
     from openff.toolkit.topology import Molecule
 
-    with capture_toolkit_warnings():
-        offmol = Molecule.from_smiles(smiles, allow_undefined_stereo=True)
-        return offmol.to_inchikey(fixed_hydrogens=True)
+    offmol = Molecule.from_smiles(smiles, allow_undefined_stereo=True)
+    return offmol.to_inchikey(fixed_hydrogens=True)
 
 
 def get_openff_molecule_bond_indices(molecule: "Molecule") -> List[Tuple[int, int]]:
@@ -677,13 +674,12 @@ def map_indexed_smiles(reference_smiles: str, target_smiles: str) -> Dict[int, i
     """
     from openff.toolkit.topology import Molecule
 
-    with capture_toolkit_warnings():
-        reference_molecule = Molecule.from_mapped_smiles(
-            reference_smiles, allow_undefined_stereo=True
-        )
-        target_molecule = Molecule.from_mapped_smiles(
-            target_smiles, allow_undefined_stereo=True
-        )
+    reference_molecule = Molecule.from_mapped_smiles(
+        reference_smiles, allow_undefined_stereo=True
+    )
+    target_molecule = Molecule.from_mapped_smiles(
+        target_smiles, allow_undefined_stereo=True
+    )
 
     _, atom_map = Molecule.are_isomorphic(
         reference_molecule,
diff --git a/openff/nagl/toolkits/rdkit.py b/openff/nagl/toolkits/rdkit.py
index 80e76b0..621737e 100644
--- a/openff/nagl/toolkits/rdkit.py
+++ b/openff/nagl/toolkits/rdkit.py
@@ -132,8 +132,6 @@ class NAGLRDKitToolkitWrapper(NAGLToolkitWrapperBase, RDKitToolkitWrapper):
         return hybridizations
 
     def to_rdkit(self, molecule: "Molecule"):
-        from openff.nagl.toolkits.openff import capture_toolkit_warnings
-
         try:
             return super().to_rdkit(molecule)
         except AssertionError:
@@ -142,23 +140,22 @@ class NAGLRDKitToolkitWrapper(NAGLToolkitWrapperBase, RDKitToolkitWrapper):
             # try patching via smiles
             # smiles = "C1CC/C=C/(CC1)Cl"
 
-            with capture_toolkit_warnings():
-                mapped_smiles = molecule.to_smiles(mapped=True)
-                mol2 = Molecule.from_mapped_smiles(
-                    mapped_smiles,
-                    allow_undefined_stereo=True,
-                    toolkit_registry=RDKitToolkitWrapper(),
-                )
-                mol2_bonds = {
-                    (bd.atom1_index, bd.atom2_index): bd.stereochemistry
-                    for bd in mol2.bonds
-                }
+            mapped_smiles = molecule.to_smiles(mapped=True)
+            mol2 = Molecule.from_mapped_smiles(
+                mapped_smiles,
+                allow_undefined_stereo=True,
+                toolkit_registry=RDKitToolkitWrapper(),
+            )
+            mol2_bonds = {
+                (bd.atom1_index, bd.atom2_index): bd.stereochemistry
+                for bd in mol2.bonds
+            }
 
-                molecule = copy.deepcopy(molecule)
-                for bond in molecule.bonds:
-                    bond._stereochemistry = mol2_bonds[
-                        bond.atom1_index, bond.atom2_index
-                    ]
+            molecule = copy.deepcopy(molecule)
+            for bond in molecule.bonds:
+                bond._stereochemistry = mol2_bonds[
+                    bond.atom1_index, bond.atom2_index
+                ]
 
             return molecule.to_rdkit()
 
@@ -176,11 +173,8 @@ class NAGLRDKitToolkitWrapper(NAGLToolkitWrapperBase, RDKitToolkitWrapper):
         mapped_smiles: str
             The mapped SMILES string.
         """
-        from openff.nagl.toolkits.openff import capture_toolkit_warnings
-
-        with capture_toolkit_warnings():
-            molecule = cls.from_smiles(smiles, allow_undefined_stereo=True)
-            return cls.to_smiles(molecule, mapped=True)
+        molecule = cls.from_smiles(smiles, allow_undefined_stereo=True)
+        return cls.to_smiles(molecule, mapped=True)
 
     @classmethod
     def mapped_smiles_to_smiles(cls, mapped_smiles: str) -> str:
@@ -196,11 +190,8 @@ class NAGLRDKitToolkitWrapper(NAGLToolkitWrapperBase, RDKitToolkitWrapper):
         smiles: str
             The SMILES string.
         """
-        from openff.nagl.toolkits.openff import capture_toolkit_warnings
-
-        with capture_toolkit_warnings():
-            molecule = cls.from_smiles(mapped_smiles, allow_undefined_stereo=True)
-            return cls.to_smiles(molecule)
+        molecule = cls.from_smiles(mapped_smiles, allow_undefined_stereo=True)
+        return cls.to_smiles(molecule)
 
     @classmethod
     def stream_molecules_from_sdf_file(


Test patch:
diff --git a/openff/nagl/tests/testing/utils.py b/openff/nagl/tests/testing/utils.py
index 11794b0..5c64a4c 100644
--- a/openff/nagl/tests/testing/utils.py
+++ b/openff/nagl/tests/testing/utils.py
@@ -11,18 +11,15 @@ def rdkit_molecule_to_smiles(rdkit_molecule):
 
 def clean_smiles(smiles, mapped=False):
     from openff.toolkit.topology.molecule import Molecule
-    from openff.nagl.toolkits.openff import capture_toolkit_warnings
 
-
-    with capture_toolkit_warnings():
-        if mapped:
-            func = Molecule.from_mapped_smiles
-        else:
-            func = Molecule.from_smiles
-        return func(
-            smiles,
-            allow_undefined_stereo=True,
-        ).to_smiles(mapped=mapped)
+    if mapped:
+        func = Molecule.from_mapped_smiles
+    else:
+        func = Molecule.from_smiles
+    return func(
+        smiles,
+        allow_undefined_stereo=True,
+    ).to_smiles(mapped=mapped)
 
 
 def assert_smiles_equal(smiles1: str, smiles2: str, mapped=False):
diff --git a/openff/nagl/tests/utils/test_openff.py b/openff/nagl/tests/utils/test_openff.py
index 0f6bd6e..c40d678 100644
--- a/openff/nagl/tests/utils/test_openff.py
+++ b/openff/nagl/tests/utils/test_openff.py
@@ -1,3 +1,5 @@
+import warnings
+
 import numpy as np
 import pytest
 from numpy.testing import assert_allclose
@@ -12,6 +14,7 @@ from openff.nagl.toolkits.openff import (
     normalize_molecule,
     smiles_to_inchi_key,
     calculate_circular_fingerprint_similarity,
+    capture_toolkit_warnings,
 )
 from openff.nagl.utils._utils import transform_coordinates
 
@@ -186,3 +189,32 @@ def test_get_best_rmsd():
         offmol.conformers[1].m_as(unit.angstrom),
     )
     assert_allclose(rmsd, reference_rmsd)
+
+
+def test_capture_toolkit_warnings(caplog):
+    from openff.toolkit.topology.molecule import Molecule
+
+    caplog.clear()
+    smiles = "ClC=CCl"
+    stereo_warning = "Warning (not error because allow_undefined_stereo=True)"
+
+    Molecule.from_smiles(smiles, allow_undefined_stereo=True)
+    # as of toolkit v0.14.4 this warning is no longer raised
+    # assert len(caplog.records) == 1
+    # assert stereo_warning in caplog.records[0].message
+
+    caplog.clear()
+    with capture_toolkit_warnings():
+        Molecule.from_smiles(smiles, allow_undefined_stereo=True)
+    assert len(caplog.records) == 0
+
+    # as of toolkit v0.14.4 this warning is no longer raised
+    # check that logging goes back to normal outside context manager
+    # Molecule.from_smiles(smiles, allow_undefined_stereo=True)
+    # assert len(caplog.records) == 1
+    # assert stereo_warning in caplog.records[0].message
+
+    # check we haven't messed with warnings
+    with warnings.catch_warnings(record=True) as records:
+        warnings.warn("test")
+        assert len(records)