def cli_bindir() -> pathlib.Path: """Report the installed GROMACS binary directory.""" path = _config().get('gmx_bindir', None) if path is not None: path = pathlib.Path(os.path.abspath(path)) if path.is_dir(): return path raise exceptions.FeatureNotAvailableError('GROMACS installation unavailable.')
def cli_executable() -> pathlib.Path: """Report the installed GROMACS command line executable.""" path = _config().get('gmx_executable', None) if path is not None: path = pathlib.Path(os.path.abspath(path)) if path.is_file(): return path raise exceptions.FeatureNotAvailableError('GROMACS installation unavailable.')
def scoped_communicator(original_comm, requested_size: int = None): from gmxapi.simulation.context import _acquire_communicator, _get_ensemble_communicator if requested_size is None: communicator = _acquire_communicator(communicator=original_comm) else: if original_comm is None or not hasattr(original_comm, 'Get_size'): raise exceptions.UsageError('A valid communicator must be provided when requesting a specific size.') original_comm_size = original_comm.Get_size() if original_comm_size < requested_size: raise exceptions.FeatureNotAvailableError( 'Cannot produce a subcommunicator of size {} from a communicator of size {}.'.format( requested_size, original_comm_size )) assert original_comm_size >= requested_size communicator = _get_ensemble_communicator(original_comm, requested_size) try: yield communicator finally: communicator.Free()