code: def evalAsync(self, amplstatements, callback, **kwargs):
          
          if self._langext is not None:
              amplstatements = self._langext.translate(amplstatements, **kwargs)
  
          def async_call():
              self._lock.acquire()
              try:
                  self._impl.eval(amplstatements)
                  self._errorhandler_wrapper.check()
              except Exception:
                  self._lock.release()
                  raise
              else:
                  self._lock.release()
                  callback.run()
          Thread(target=async_call).start()
docs: Interpret the given AMPL statement asynchronously.
  
          Args:
            amplstatements: A collection of AMPL statements and declarations to
            be passed to the interpreter.
  
            callback: Callback to be executed when the statement has been
            interpreted.
  
          Raises:
            RuntimeError: if the input is not a complete AMPL statement (e.g.
            if it does not end with semicolon) or if the underlying
            interpreter is not running.