'Call the ``prover9`` binary with the given input.
:param input_str: A string whose contents are used as stdin.
:param args: A list of command-line arguments.
:return: A tuple (stdout, returncode)
:see: ``config_prover9``'

def _call_prover9(self, input_str, args=[], verbose=False):

    if (self._prover9_bin is None):
        self._prover9_bin = self._find_binary('prover9', verbose)
    updated_input_str = ''
    if (self._timeout > 0):
        updated_input_str += ('assign(max_seconds,    %d).\n\n' % self._timeout)
    updated_input_str += input_str
    (stdout, returncode) = self._call(updated_input_str, self._prover9_bin, args, verbose)
    if (returncode not in [0, 2]):
        errormsgprefix = '%%ERROR:'
        if (errormsgprefix in stdout):
            msgstart = stdout.index(errormsgprefix)
            errormsg = stdout[msgstart:].strip()
        else:
            errormsg = None
        if (returncode in [3, 4, 5, 6]):
            raise Prover9LimitExceededException(returncode, errormsg)
        else:
            raise Prover9FatalException(returncode, errormsg)
    return (stdout, returncode)
