class_docstr: Wrapper for Wolfram Alpha.
  
  Docs for using:
  
  1. Go to wolfram alpha and sign up for a developer account
  2. Create an app and get your APP ID
  3. Save your APP ID into WOLFRAM_ALPHA_APPID env variable
  4. pip install wolframalpha
docstr: Run query through WolframAlpha and parse result.
docstr_tok: ["Run","query","through","WolframAlpha","and","parse","result","."]
code: def run(self, query: str) -> Tuple[str, bool]:
      """Run query through WolframAlpha and parse result."""
      from urllib.error import HTTPError
  
      is_success = False  # added
      res = None
      for _ in range(20):
          try:
              res = self.wolfram_client.query(query)
              break
          except HTTPError:
              sleep(1)
          except Exception:
              return (
                  "Wolfram Alpha wasn't able to answer it. Please try a new query for wolfram or use python.",
                  is_success,
              )
      if res is None:
          return (
              "Wolfram Alpha wasn't able to answer it (may due to web error), you can try again or use python.",
              is_success,
          )
  
      try:
          if not res["@success"]:
              return (
                  "Your Wolfram query is invalid. Please try a new query for wolfram or use python.",
                  is_success,
              )
          assumption = next(res.pods).text
          answer = ""
          for result in res["pod"]:
              if result["@title"] == "Solution":
                  answer = result["subpod"]["plaintext"]
              if (
                  result["@title"] == "Results"
                  or result["@title"] == "Solutions"
              ):
                  for i, sub in enumerate(result["subpod"]):
                      answer += f"ans {i}: " + sub["plaintext"] + "\n"
                  break
          if answer == "":
              answer = next(res.results).text
  
      except Exception:
          return (
              "Wolfram Alpha wasn't able to answer it. Please try a new query for wolfram or use python.",
              is_success,
          )
  
      if answer is None or answer == "":
          # We don't want to return the assumption alone if answer is empty
          return "No good Wolfram Alpha Result was found", is_success
      is_success = True
      return f"Assumption: {assumption} \nAnswer: {answer}", is_success
  
imports: import re
  import os
  from pydantic import BaseModel, Extra, root_validator
  from typing import Any, Callable, Dict, List, Optional, Union, Tuple
  from time import sleep
  from autogen._pydantic import PYDANTIC_V1
  from autogen.agentchat import Agent, UserProxyAgent
  from autogen.code_utils import UNKNOWN, extract_code, execute_code, infer_lang
  from autogen.math_utils import get_answer
label_desc: Use image node_id 2 for calling the WolframAlphaAPIWrapper obj's underlying member method code with example usage: obj.run(query) and returns: str, assumption, str, answer,  is_success, str,  is_success, str,  is_success, str,  is_success, str,  is_success, str,  is_success