Thanks for replying Eric!
TBH, I’m not sure if I’m encountering the problem in issue #4736 or something different. GROMACS is built for thread-MPI. Here are the first few test failures from testing after building GROMACS, copying python_packaging from the source directory into the build directory, and running pytest test:
================================================= test session starts ==================================================
platform linux -- Python 3.10.10, pytest-7.1.2, pluggy-1.0.0
rootdir: /da/dmp/cb/sloutro1/software/forGROMACS/gromacs/2023.0/AVX-512/Xeon-Gold-6132_noGPU/build/python_packaging/gmxapi/test, configfile: pytest.ini
collected 39 items
test/test_commandline.py ........... [ 28%]
test/test_exceptions.py . [ 30%]
test/test_feature_check.py .ss [ 38%]
test/test_fileio.py EEE [ 46%]
test/test_fileio_low_level.py EEE [ 53%]
test/test_mdrun.py EEsEsEE [ 71%]
test/test_operation.py .... [ 82%]
test/test_runtime.py .... [ 92%]
test/test_subgraph.py .E. [100%]
======================================================== ERRORS ========================================================
_______________________________________ ERROR at setup of test_tprfile_read_old ________________________________________
gmxcli = PosixPath('/home/sloutro1/software/forGROMACS/gromacs/2023.0/AVX-512/Xeon-Gold-6132_noGPU/install/bin/gmx')
tmp_path_factory = TempPathFactory(_given_basetemp=None, _trace=<pluggy._tracing.TagTracerSub object at 0x2aaac3d4d090>, _basetemp=PosixPath('/tmp/pytest-of-sloutro1/pytest-0'))
@pytest.fixture(scope="session")
def spc_water_box_collection(gmxcli, tmp_path_factory):
"""Provide a collection of simulation input items for a simple simulation.
Prepare the MD input in a freshly created working directory.
Solvate a 5nm cubic box with spc water. Return a dictionary of the artifacts produced.
"""
import gmxapi as gmx
from gmxapi.testsupport import scoped_chdir
# TODO: (#2896) Fetch MD input from package / library data.
# Example:
# import pkg_resources
# # Note: importing pkg_resources means setuptools is required for running this test.
# # Get or build TPR file from data bundled via setup(package_data=...)
# # Ref https://setuptools.readthedocs.io/en/latest/setuptools.html#including-data-files
# from gmx.data import tprfilename
with scoped_chdir(tmp_path_factory.mktemp("spc_water_box")) as tempdir:
testdir = os.path.dirname(__file__)
with open(os.path.join(testdir, "testdata.json"), "r") as fh:
testdata = json.load(fh)
# TODO: (#2756) Don't rely on so many automagical behaviors (as described in comments below)
structurefile = os.path.join(tempdir, "structure.gro")
# We let `gmx solvate` use the default solvent. Otherwise, we would do
# gro_input = testdata['solvent_structure']
# with open(structurefile, 'w') as fh:
# fh.write('\n'.join(gro_input))
# fh.write('\n')
topfile = os.path.join(tempdir, "topology.top")
top_input = testdata["solvent_topology"]
# `gmx solvate` will append a line to the provided file with the molecule count,
# so we strip the last line from the input topology.
with open(topfile, "w") as fh:
fh.write("\n".join(top_input[:-1]))
fh.write("\n")
assert os.path.exists(topfile)
solvate = gmx.commandline_operation(
gmxcli,
arguments=["solvate", "-box", "5", "5", "5"],
# We use the default solvent instead of specifying one.
# input_files={'-cs': structurefile},
output_files={
"-p": topfile,
"-o": structurefile,
},
env={"PATH": os.getenv("PATH")},
)
assert os.path.exists(topfile)
if solvate.output.returncode.result() != 0:
logging.debug(solvate.output.stderr.result())
> raise RuntimeError("solvate failed in spc_water_box testing fixture.")
E RuntimeError: solvate failed in spc_water_box testing fixture.
test/conftest.py:126: RuntimeError
___________________________________________ ERROR at setup of test_read_tpr ____________________________________________
gmxcli = PosixPath('/home/sloutro1/software/forGROMACS/gromacs/2023.0/AVX-512/Xeon-Gold-6132_noGPU/install/bin/gmx')
tmp_path_factory = TempPathFactory(_given_basetemp=None, _trace=<pluggy._tracing.TagTracerSub object at 0x2aaac3d4d090>, _basetemp=PosixPath('/tmp/pytest-of-sloutro1/pytest-0'))
@pytest.fixture(scope="session")
def spc_water_box_collection(gmxcli, tmp_path_factory):
"""Provide a collection of simulation input items for a simple simulation.
Prepare the MD input in a freshly created working directory.
Solvate a 5nm cubic box with spc water. Return a dictionary of the artifacts produced.
"""
import gmxapi as gmx
from gmxapi.testsupport import scoped_chdir
# TODO: (#2896) Fetch MD input from package / library data.
# Example:
# import pkg_resources
# # Note: importing pkg_resources means setuptools is required for running this test.
# # Get or build TPR file from data bundled via setup(package_data=...)
# # Ref https://setuptools.readthedocs.io/en/latest/setuptools.html#including-data-files
# from gmx.data import tprfilename
with scoped_chdir(tmp_path_factory.mktemp("spc_water_box")) as tempdir:
testdir = os.path.dirname(__file__)
with open(os.path.join(testdir, "testdata.json"), "r") as fh:
testdata = json.load(fh)
# TODO: (#2756) Don't rely on so many automagical behaviors (as described in comments below)
structurefile = os.path.join(tempdir, "structure.gro")
# We let `gmx solvate` use the default solvent. Otherwise, we would do
# gro_input = testdata['solvent_structure']
# with open(structurefile, 'w') as fh:
# fh.write('\n'.join(gro_input))
# fh.write('\n')
topfile = os.path.join(tempdir, "topology.top")
top_input = testdata["solvent_topology"]
# `gmx solvate` will append a line to the provided file with the molecule count,
# so we strip the last line from the input topology.
with open(topfile, "w") as fh:
fh.write("\n".join(top_input[:-1]))
fh.write("\n")
assert os.path.exists(topfile)
solvate = gmx.commandline_operation(
gmxcli,
arguments=["solvate", "-box", "5", "5", "5"],
# We use the default solvent instead of specifying one.
# input_files={'-cs': structurefile},
output_files={
"-p": topfile,
"-o": structurefile,
},
env={"PATH": os.getenv("PATH")},
)
assert os.path.exists(topfile)
if solvate.output.returncode.result() != 0:
logging.debug(solvate.output.stderr.result())
> raise RuntimeError("solvate failed in spc_water_box testing fixture.")
E RuntimeError: solvate failed in spc_water_box testing fixture.
test/conftest.py:126: RuntimeError
________________________________________ ERROR at setup of test_write_tpr_file _________________________________________
gmxcli = PosixPath('/home/sloutro1/software/forGROMACS/gromacs/2023.0/AVX-512/Xeon-Gold-6132_noGPU/install/bin/gmx')
tmp_path_factory = TempPathFactory(_given_basetemp=None, _trace=<pluggy._tracing.TagTracerSub object at 0x2aaac3d4d090>, _basetemp=PosixPath('/tmp/pytest-of-sloutro1/pytest-0'))
@pytest.fixture(scope="session")
def spc_water_box_collection(gmxcli, tmp_path_factory):
"""Provide a collection of simulation input items for a simple simulation.
Prepare the MD input in a freshly created working directory.
Solvate a 5nm cubic box with spc water. Return a dictionary of the artifacts produced.
"""
import gmxapi as gmx
from gmxapi.testsupport import scoped_chdir
# TODO: (#2896) Fetch MD input from package / library data.
# Example:
# import pkg_resources
# # Note: importing pkg_resources means setuptools is required for running this test.
# # Get or build TPR file from data bundled via setup(package_data=...)
# # Ref https://setuptools.readthedocs.io/en/latest/setuptools.html#including-data-files
# from gmx.data import tprfilename
with scoped_chdir(tmp_path_factory.mktemp("spc_water_box")) as tempdir:
testdir = os.path.dirname(__file__)
with open(os.path.join(testdir, "testdata.json"), "r") as fh:
testdata = json.load(fh)
# TODO: (#2756) Don't rely on so many automagical behaviors (as described in comments below)
structurefile = os.path.join(tempdir, "structure.gro")
# We let `gmx solvate` use the default solvent. Otherwise, we would do
# gro_input = testdata['solvent_structure']
# with open(structurefile, 'w') as fh:
# fh.write('\n'.join(gro_input))
# fh.write('\n')
topfile = os.path.join(tempdir, "topology.top")
top_input = testdata["solvent_topology"]
# `gmx solvate` will append a line to the provided file with the molecule count,
# so we strip the last line from the input topology.
with open(topfile, "w") as fh:
fh.write("\n".join(top_input[:-1]))
fh.write("\n")
assert os.path.exists(topfile)
solvate = gmx.commandline_operation(
gmxcli,
arguments=["solvate", "-box", "5", "5", "5"],
# We use the default solvent instead of specifying one.
# input_files={'-cs': structurefile},
output_files={
"-p": topfile,
"-o": structurefile,
},
env={"PATH": os.getenv("PATH")},
)
assert os.path.exists(topfile)
if solvate.output.returncode.result() != 0:
logging.debug(solvate.output.stderr.result())
> raise RuntimeError("solvate failed in spc_water_box testing fixture.")
E RuntimeError: solvate failed in spc_water_box testing fixture.
test/conftest.py:126: RuntimeError
_________________________________________ ERROR at setup of test_core_read_tpr _________________________________________
gmxcli = PosixPath('/home/sloutro1/software/forGROMACS/gromacs/2023.0/AVX-512/Xeon-Gold-6132_noGPU/install/bin/gmx')
tmp_path_factory = TempPathFactory(_given_basetemp=None, _trace=<pluggy._tracing.TagTracerSub object at 0x2aaac3d4d090>, _basetemp=PosixPath('/tmp/pytest-of-sloutro1/pytest-0'))
@pytest.fixture(scope="session")
def spc_water_box_collection(gmxcli, tmp_path_factory):
"""Provide a collection of simulation input items for a simple simulation.
Prepare the MD input in a freshly created working directory.
Solvate a 5nm cubic box with spc water. Return a dictionary of the artifacts produced.
"""
import gmxapi as gmx
from gmxapi.testsupport import scoped_chdir
# TODO: (#2896) Fetch MD input from package / library data.
# Example:
# import pkg_resources
# # Note: importing pkg_resources means setuptools is required for running this test.
# # Get or build TPR file from data bundled via setup(package_data=...)
# # Ref https://setuptools.readthedocs.io/en/latest/setuptools.html#including-data-files
# from gmx.data import tprfilename
with scoped_chdir(tmp_path_factory.mktemp("spc_water_box")) as tempdir:
testdir = os.path.dirname(__file__)
with open(os.path.join(testdir, "testdata.json"), "r") as fh:
testdata = json.load(fh)
# TODO: (#2756) Don't rely on so many automagical behaviors (as described in comments below)
structurefile = os.path.join(tempdir, "structure.gro")
# We let `gmx solvate` use the default solvent. Otherwise, we would do
# gro_input = testdata['solvent_structure']
# with open(structurefile, 'w') as fh:
# fh.write('\n'.join(gro_input))
# fh.write('\n')
topfile = os.path.join(tempdir, "topology.top")
top_input = testdata["solvent_topology"]
# `gmx solvate` will append a line to the provided file with the molecule count,
# so we strip the last line from the input topology.
with open(topfile, "w") as fh:
fh.write("\n".join(top_input[:-1]))
fh.write("\n")
assert os.path.exists(topfile)
solvate = gmx.commandline_operation(
gmxcli,
arguments=["solvate", "-box", "5", "5", "5"],
# We use the default solvent instead of specifying one.
# input_files={'-cs': structurefile},
output_files={
"-p": topfile,
"-o": structurefile,
},
env={"PATH": os.getenv("PATH")},
)
assert os.path.exists(topfile)
if solvate.output.returncode.result() != 0:
logging.debug(solvate.output.stderr.result())
> raise RuntimeError("solvate failed in spc_water_box testing fixture.")
E RuntimeError: solvate failed in spc_water_box testing fixture.
test/conftest.py:126: RuntimeError
_____________________________________ ERROR at setup of test_core_rewrite_tprfile ______________________________________
gmxcli = PosixPath('/home/sloutro1/software/forGROMACS/gromacs/2023.0/AVX-512/Xeon-Gold-6132_noGPU/install/bin/gmx')
tmp_path_factory = TempPathFactory(_given_basetemp=None, _trace=<pluggy._tracing.TagTracerSub object at 0x2aaac3d4d090>, _basetemp=PosixPath('/tmp/pytest-of-sloutro1/pytest-0'))
@pytest.fixture(scope="session")
def spc_water_box_collection(gmxcli, tmp_path_factory):
"""Provide a collection of simulation input items for a simple simulation.
Prepare the MD input in a freshly created working directory.
Solvate a 5nm cubic box with spc water. Return a dictionary of the artifacts produced.
"""
import gmxapi as gmx
from gmxapi.testsupport import scoped_chdir
# TODO: (#2896) Fetch MD input from package / library data.
# Example:
# import pkg_resources
# # Note: importing pkg_resources means setuptools is required for running this test.
# # Get or build TPR file from data bundled via setup(package_data=...)
# # Ref https://setuptools.readthedocs.io/en/latest/setuptools.html#including-data-files
# from gmx.data import tprfilename
with scoped_chdir(tmp_path_factory.mktemp("spc_water_box")) as tempdir:
testdir = os.path.dirname(__file__)
with open(os.path.join(testdir, "testdata.json"), "r") as fh:
testdata = json.load(fh)
# TODO: (#2756) Don't rely on so many automagical behaviors (as described in comments below)
structurefile = os.path.join(tempdir, "structure.gro")
# We let `gmx solvate` use the default solvent. Otherwise, we would do
# gro_input = testdata['solvent_structure']
# with open(structurefile, 'w') as fh:
# fh.write('\n'.join(gro_input))
# fh.write('\n')
topfile = os.path.join(tempdir, "topology.top")
top_input = testdata["solvent_topology"]
# `gmx solvate` will append a line to the provided file with the molecule count,
# so we strip the last line from the input topology.
with open(topfile, "w") as fh:
fh.write("\n".join(top_input[:-1]))
fh.write("\n")
assert os.path.exists(topfile)
solvate = gmx.commandline_operation(
gmxcli,
arguments=["solvate", "-box", "5", "5", "5"],
# We use the default solvent instead of specifying one.
# input_files={'-cs': structurefile},
output_files={
"-p": topfile,
"-o": structurefile,
},
env={"PATH": os.getenv("PATH")},
)
assert os.path.exists(topfile)
if solvate.output.returncode.result() != 0:
logging.debug(solvate.output.stderr.result())
> raise RuntimeError("solvate failed in spc_water_box testing fixture.")
E RuntimeError: solvate failed in spc_water_box testing fixture.
test/conftest.py:126: RuntimeError
_________________________________ ERROR at setup of test_core_read_and_write_tpr_file __________________________________
gmxcli = PosixPath('/home/sloutro1/software/forGROMACS/gromacs/2023.0/AVX-512/Xeon-Gold-6132_noGPU/install/bin/gmx')
tmp_path_factory = TempPathFactory(_given_basetemp=None, _trace=<pluggy._tracing.TagTracerSub object at 0x2aaac3d4d090>, _basetemp=PosixPath('/tmp/pytest-of-sloutro1/pytest-0'))
@pytest.fixture(scope="session")
def spc_water_box_collection(gmxcli, tmp_path_factory):
"""Provide a collection of simulation input items for a simple simulation.
Prepare the MD input in a freshly created working directory.
Solvate a 5nm cubic box with spc water. Return a dictionary of the artifacts produced.
"""
import gmxapi as gmx
from gmxapi.testsupport import scoped_chdir
# TODO: (#2896) Fetch MD input from package / library data.
# Example:
# import pkg_resources
# # Note: importing pkg_resources means setuptools is required for running this test.
# # Get or build TPR file from data bundled via setup(package_data=...)
# # Ref https://setuptools.readthedocs.io/en/latest/setuptools.html#including-data-files
# from gmx.data import tprfilename
with scoped_chdir(tmp_path_factory.mktemp("spc_water_box")) as tempdir:
testdir = os.path.dirname(__file__)
with open(os.path.join(testdir, "testdata.json"), "r") as fh:
testdata = json.load(fh)
# TODO: (#2756) Don't rely on so many automagical behaviors (as described in comments below)
structurefile = os.path.join(tempdir, "structure.gro")
# We let `gmx solvate` use the default solvent. Otherwise, we would do
# gro_input = testdata['solvent_structure']
# with open(structurefile, 'w') as fh:
# fh.write('\n'.join(gro_input))
# fh.write('\n')
topfile = os.path.join(tempdir, "topology.top")
top_input = testdata["solvent_topology"]
# `gmx solvate` will append a line to the provided file with the molecule count,
# so we strip the last line from the input topology.
with open(topfile, "w") as fh:
fh.write("\n".join(top_input[:-1]))
fh.write("\n")
assert os.path.exists(topfile)
solvate = gmx.commandline_operation(
gmxcli,
arguments=["solvate", "-box", "5", "5", "5"],
# We use the default solvent instead of specifying one.
# input_files={'-cs': structurefile},
output_files={
"-p": topfile,
"-o": structurefile,
},
env={"PATH": os.getenv("PATH")},
)
assert os.path.exists(topfile)
if solvate.output.returncode.result() != 0:
logging.debug(solvate.output.stderr.result())
> raise RuntimeError("solvate failed in spc_water_box testing fixture.")
E RuntimeError: solvate failed in spc_water_box testing fixture.
test/conftest.py:126: RuntimeError
=============================================== short test summary info ================================================
ERROR test/test_fileio.py::test_tprfile_read_old - RuntimeError: solvate failed in spc_water_box testing fixture.
ERROR test/test_fileio.py::test_read_tpr - RuntimeError: solvate failed in spc_water_box testing fixture.
ERROR test/test_fileio.py::test_write_tpr_file - RuntimeError: solvate failed in spc_water_box testing fixture.
ERROR test/test_fileio_low_level.py::test_core_read_tpr - RuntimeError: solvate failed in spc_water_box testing fixture.
ERROR test/test_fileio_low_level.py::test_core_rewrite_tprfile - RuntimeError: solvate failed in spc_water_box testin...
ERROR test/test_fileio_low_level.py::test_core_read_and_write_tpr_file - RuntimeError: solvate failed in spc_water_bo...
ERROR test/test_mdrun.py::test_run_from_tpr - RuntimeError: solvate failed in spc_water_box testing fixture.
ERROR test/test_mdrun.py::test_mdrun_runtime_args - RuntimeError: solvate failed in spc_water_box testing fixture.
ERROR test/test_mdrun.py::test_extend_simulation_via_checkpoint - RuntimeError: solvate failed in spc_water_box testi...
ERROR test/test_mdrun.py::test_run_from_read_tpr_op - RuntimeError: solvate failed in spc_water_box testing fixture.
ERROR test/test_mdrun.py::test_run_from_modify_input_op - RuntimeError: solvate failed in spc_water_box testing fixture.
ERROR test/test_subgraph.py::test_subgraph_simulation_extension - RuntimeError: solvate failed in spc_water_box testi...
======================================= 23 passed, 4 skipped, 12 errors in 0.95s =======================================