We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
"Whats" is not parsed out when searching WolframAlpha
`what is a dog` results in `I am searching for a dog` whereas `Whats a dog` results in `I am searching for whats a dog`.


--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `mycroft/skills/wolfram_alpha/__init__.py`
Content:
```
1 # Copyright 2016 Mycroft AI, Inc.
2 #
3 # This file is part of Mycroft Core.
4 #
5 # Mycroft Core is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU General Public License as published by
7 # the Free Software Foundation, either version 3 of the License, or
8 # (at your option) any later version.
9 #
10 # Mycroft Core is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 # GNU General Public License for more details.
14 #
15 # You should have received a copy of the GNU General Public License
16 # along with Mycroft Core.  If not, see <http://www.gnu.org/licenses/>.
17 
18 
19 from StringIO import StringIO
20 from os.path import dirname
21 
22 import re
23 import requests
24 import wolframalpha
25 from six.moves import urllib
26 
27 from mycroft.identity import IdentityManager
28 from mycroft.skills.core import MycroftSkill
29 from mycroft.util import CerberusAccessDenied
30 from mycroft.util.log import getLogger
31 
32 __author__ = 'seanfitz'
33 
34 logger = getLogger(__name__)
35 
36 
37 class EnglishQuestionParser(object):
38     """
39     Poor-man's english question parser. Not even close to conclusive, but
40     appears to construct some decent w|a queries and responses.
41     """
42 
43     def __init__(self):
44         self.regexes = [
45             re.compile(
46                 ".*(?P<QuestionWord>who|what|when|where|why|which) "
47                 "(?P<Query1>.*) (?P<QuestionVerb>is|are|was|were) "
48                 "(?P<Query2>.*)"),
49             re.compile(
50                 ".*(?P<QuestionWord>who|what|when|where|why|which) "
51                 "(?P<QuestionVerb>\w+) (?P<Query>.*)")
52         ]
53 
54     def _normalize(self, groupdict):
55         if 'Query' in groupdict:
56             return groupdict
57         elif 'Query1' and 'Query2' in groupdict:
58             return {
59                 'QuestionWord': groupdict.get('QuestionWord'),
60                 'QuestionVerb': groupdict.get('QuestionVerb'),
61                 'Query': ' '.join([groupdict.get('Query1'), groupdict.get(
62                     'Query2')])
63             }
64 
65     def parse(self, utterance):
66         for regex in self.regexes:
67             match = regex.match(utterance)
68             if match:
69                 return self._normalize(match.groupdict())
70         return None
71 
72 
73 class CerberusWolframAlphaClient(object):
74     """
75     Wolfram|Alpha v2.0 client
76     """
77 
78     def query(self, query):
79         """
80         Query Wolfram|Alpha with query using the v2.0 API
81         """
82         identity = IdentityManager().get()
83         bearer_token = 'Bearer %s:%s' % (identity.device_id, identity.token)
84         query = urllib.parse.urlencode(dict(input=query))
85         url = 'https://cerberus.mycroft.ai/wolframalpha/v2/query?' + query
86         headers = {'Authorization': bearer_token}
87         response = requests.get(url, headers=headers)
88         if response.status_code == 401:
89             raise CerberusAccessDenied()
90         logger.debug(response.content)
91         return wolframalpha.Result(StringIO(response.content))
92 
93 
94 class WolframAlphaSkill(MycroftSkill):
95     def __init__(self):
96         MycroftSkill.__init__(self, name="WolframAlphaSkill")
97         self.__init_client()
98         self.question_parser = EnglishQuestionParser()
99 
100     def __init_client(self):
101         key = self.config.get('api_key')
102         if key:
103             self.client = wolframalpha.Client(key)
104         else:
105             self.client = CerberusWolframAlphaClient()
106 
107     def initialize(self):
108         self.init_dialog(dirname(__file__))
109         self.emitter.on('intent_failure', self.handle_fallback)
110 
111     def get_result(self, res):
112         result = None
113         try:
114             result = next(res.results).text
115             return result
116         except:
117             try:
118                 result = self.__find_pod_id(res.pods, 'Value')
119                 if not result:
120                     result = self.__find_pod_id(
121                         res.pods, 'NotableFacts:PeopleData')
122                     if not result:
123                         result = self.__find_pod_id(
124                             res.pods, 'BasicInformation:PeopleData')
125                         if not result:
126                             result = self.__find_pod_id(res.pods, 'Definition')
127                             if not result:
128                                 result = self.__find_pod_id(
129                                     res.pods, 'DecimalApproximation')
130                                 if result:
131                                     result = result[:5]
132                                 else:
133                                     result = self.__find_num(
134                                         res.pods, '200')
135                 return result
136             except:
137                 return result
138 
139     def handle_fallback(self, message):
140         logger.debug(
141             "Could not determine intent, falling back to WolframAlpha Skill!")
142         utterance = message.metadata.get('utterance')
143         parsed_question = self.question_parser.parse(utterance)
144 
145         # biding some time
146         if parsed_question:
147             self.speak("I am searching for " + parsed_question.get('Query'))
148         else:
149             self.speak("I am searching for " + utterance)
150         query = utterance
151         if parsed_question:
152             query = "%s %s %s" % (parsed_question.get('QuestionWord'),
153                                   parsed_question.get('QuestionVerb'),
154                                   parsed_question.get('Query'))
155 
156         try:
157             res = self.client.query(query)
158             result = self.get_result(res)
159         except CerberusAccessDenied as e:
160             self.speak_dialog('not.paired')
161             return
162         except Exception as e:
163             logger.exception(e)
164             self.speak("Sorry, I don't understand your request.")
165             return
166 
167         if result:
168             input_interpretation = self.__find_pod_id(res.pods, 'Input')
169             verb = "is"
170             structured_syntax_regex = re.compile(".*(\||\[|\\\\|\]).*")
171             if parsed_question:
172                 if not input_interpretation or structured_syntax_regex.match(
173                         input_interpretation):
174                     input_interpretation = parsed_question.get('Query')
175                 verb = parsed_question.get('QuestionVerb')
176 
177             if "|" in result:  # Assuming "|" indicates a list of items
178                 verb = ":"
179 
180             result = self.process_wolfram_string(result)
181             input_interpretation = \
182                 self.process_wolfram_string(input_interpretation)
183             response = "%s %s %s" % (input_interpretation, verb, result)
184 
185             self.speak(response)
186         else:
187             self.speak("Sorry, I don't understand your request.")
188 
189     @staticmethod
190     def __find_pod_id(pods, pod_id):
191         for pod in pods:
192             if pod_id in pod.id:
193                 return pod.text
194         return None
195 
196     @staticmethod
197     def process_wolfram_string(text):
198         # Remove extra whitespace
199         text = re.sub(r" \s+", r" ", text)
200 
201         # Convert | symbols to commas
202         text = re.sub(r" \| ", r", ", text)
203 
204         # Convert newlines to commas
205         text = re.sub(r"\n", r", ", text)
206 
207         # Convert !s to factorial
208         text = re.sub(r"!", r",factorial", text)
209         return text
210 
211     @staticmethod
212     def __find_num(pods, pod_num):
213         for pod in pods:
214             if pod.node.attrib['position'] == pod_num:
215                 return pod.text
216         return None
217 
218     def stop(self):
219         pass
220 
221 
222 def create_skill():
223     return WolframAlphaSkill()
224
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/mycroft/skills/wolfram_alpha/__init__.py b/mycroft/skills/wolfram_alpha/__init__.py
--- a/mycroft/skills/wolfram_alpha/__init__.py
+++ b/mycroft/skills/wolfram_alpha/__init__.py
@@ -46,6 +46,9 @@
                 ".*(?P<QuestionWord>who|what|when|where|why|which) "
                 "(?P<Query1>.*) (?P<QuestionVerb>is|are|was|were) "
                 "(?P<Query2>.*)"),
+            re.compile(
+                ".*(?P<QuestionWord>what)(?P<QuestionVerb>\'s|s) "
+                "(?P<Query>.*)"),
             re.compile(
                 ".*(?P<QuestionWord>who|what|when|where|why|which) "
                 "(?P<QuestionVerb>\w+) (?P<Query>.*)")

{"golden_diff": "diff --git a/mycroft/skills/wolfram_alpha/__init__.py b/mycroft/skills/wolfram_alpha/__init__.py\n--- a/mycroft/skills/wolfram_alpha/__init__.py\n+++ b/mycroft/skills/wolfram_alpha/__init__.py\n@@ -46,6 +46,9 @@\n                 \".*(?P<QuestionWord>who|what|when|where|why|which) \"\n                 \"(?P<Query1>.*) (?P<QuestionVerb>is|are|was|were) \"\n                 \"(?P<Query2>.*)\"),\n+            re.compile(\n+                \".*(?P<QuestionWord>what)(?P<QuestionVerb>\\'s|s) \"\n+                \"(?P<Query>.*)\"),\n             re.compile(\n                 \".*(?P<QuestionWord>who|what|when|where|why|which) \"\n                 \"(?P<QuestionVerb>\\w+) (?P<Query>.*)\")\n", "issue": "\"Whats\" is not parsed out when searching WolframAlpha\n`what is a dog` results in `I am searching for a dog` whereas `Whats a dog` results in `I am searching for whats a dog`.\n\n", "before_files": [{"content": "# Copyright 2016 Mycroft AI, Inc.\n#\n# This file is part of Mycroft Core.\n#\n# Mycroft Core is free software: you can redistribute it and/or modify\n# it under the terms of the GNU General Public License as published by\n# the Free Software Foundation, either version 3 of the License, or\n# (at your option) any later version.\n#\n# Mycroft Core is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n# GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License\n# along with Mycroft Core.  If not, see <http://www.gnu.org/licenses/>.\n\n\nfrom StringIO import StringIO\nfrom os.path import dirname\n\nimport re\nimport requests\nimport wolframalpha\nfrom six.moves import urllib\n\nfrom mycroft.identity import IdentityManager\nfrom mycroft.skills.core import MycroftSkill\nfrom mycroft.util import CerberusAccessDenied\nfrom mycroft.util.log import getLogger\n\n__author__ = 'seanfitz'\n\nlogger = getLogger(__name__)\n\n\nclass EnglishQuestionParser(object):\n    \"\"\"\n    Poor-man's english question parser. Not even close to conclusive, but\n    appears to construct some decent w|a queries and responses.\n    \"\"\"\n\n    def __init__(self):\n        self.regexes = [\n            re.compile(\n                \".*(?P<QuestionWord>who|what|when|where|why|which) \"\n                \"(?P<Query1>.*) (?P<QuestionVerb>is|are|was|were) \"\n                \"(?P<Query2>.*)\"),\n            re.compile(\n                \".*(?P<QuestionWord>who|what|when|where|why|which) \"\n                \"(?P<QuestionVerb>\\w+) (?P<Query>.*)\")\n        ]\n\n    def _normalize(self, groupdict):\n        if 'Query' in groupdict:\n            return groupdict\n        elif 'Query1' and 'Query2' in groupdict:\n            return {\n                'QuestionWord': groupdict.get('QuestionWord'),\n                'QuestionVerb': groupdict.get('QuestionVerb'),\n                'Query': ' '.join([groupdict.get('Query1'), groupdict.get(\n                    'Query2')])\n            }\n\n    def parse(self, utterance):\n        for regex in self.regexes:\n            match = regex.match(utterance)\n            if match:\n                return self._normalize(match.groupdict())\n        return None\n\n\nclass CerberusWolframAlphaClient(object):\n    \"\"\"\n    Wolfram|Alpha v2.0 client\n    \"\"\"\n\n    def query(self, query):\n        \"\"\"\n        Query Wolfram|Alpha with query using the v2.0 API\n        \"\"\"\n        identity = IdentityManager().get()\n        bearer_token = 'Bearer %s:%s' % (identity.device_id, identity.token)\n        query = urllib.parse.urlencode(dict(input=query))\n        url = 'https://cerberus.mycroft.ai/wolframalpha/v2/query?' + query\n        headers = {'Authorization': bearer_token}\n        response = requests.get(url, headers=headers)\n        if response.status_code == 401:\n            raise CerberusAccessDenied()\n        logger.debug(response.content)\n        return wolframalpha.Result(StringIO(response.content))\n\n\nclass WolframAlphaSkill(MycroftSkill):\n    def __init__(self):\n        MycroftSkill.__init__(self, name=\"WolframAlphaSkill\")\n        self.__init_client()\n        self.question_parser = EnglishQuestionParser()\n\n    def __init_client(self):\n        key = self.config.get('api_key')\n        if key:\n            self.client = wolframalpha.Client(key)\n        else:\n            self.client = CerberusWolframAlphaClient()\n\n    def initialize(self):\n        self.init_dialog(dirname(__file__))\n        self.emitter.on('intent_failure', self.handle_fallback)\n\n    def get_result(self, res):\n        result = None\n        try:\n            result = next(res.results).text\n            return result\n        except:\n            try:\n                result = self.__find_pod_id(res.pods, 'Value')\n                if not result:\n                    result = self.__find_pod_id(\n                        res.pods, 'NotableFacts:PeopleData')\n                    if not result:\n                        result = self.__find_pod_id(\n                            res.pods, 'BasicInformation:PeopleData')\n                        if not result:\n                            result = self.__find_pod_id(res.pods, 'Definition')\n                            if not result:\n                                result = self.__find_pod_id(\n                                    res.pods, 'DecimalApproximation')\n                                if result:\n                                    result = result[:5]\n                                else:\n                                    result = self.__find_num(\n                                        res.pods, '200')\n                return result\n            except:\n                return result\n\n    def handle_fallback(self, message):\n        logger.debug(\n            \"Could not determine intent, falling back to WolframAlpha Skill!\")\n        utterance = message.metadata.get('utterance')\n        parsed_question = self.question_parser.parse(utterance)\n\n        # biding some time\n        if parsed_question:\n            self.speak(\"I am searching for \" + parsed_question.get('Query'))\n        else:\n            self.speak(\"I am searching for \" + utterance)\n        query = utterance\n        if parsed_question:\n            query = \"%s %s %s\" % (parsed_question.get('QuestionWord'),\n                                  parsed_question.get('QuestionVerb'),\n                                  parsed_question.get('Query'))\n\n        try:\n            res = self.client.query(query)\n            result = self.get_result(res)\n        except CerberusAccessDenied as e:\n            self.speak_dialog('not.paired')\n            return\n        except Exception as e:\n            logger.exception(e)\n            self.speak(\"Sorry, I don't understand your request.\")\n            return\n\n        if result:\n            input_interpretation = self.__find_pod_id(res.pods, 'Input')\n            verb = \"is\"\n            structured_syntax_regex = re.compile(\".*(\\||\\[|\\\\\\\\|\\]).*\")\n            if parsed_question:\n                if not input_interpretation or structured_syntax_regex.match(\n                        input_interpretation):\n                    input_interpretation = parsed_question.get('Query')\n                verb = parsed_question.get('QuestionVerb')\n\n            if \"|\" in result:  # Assuming \"|\" indicates a list of items\n                verb = \":\"\n\n            result = self.process_wolfram_string(result)\n            input_interpretation = \\\n                self.process_wolfram_string(input_interpretation)\n            response = \"%s %s %s\" % (input_interpretation, verb, result)\n\n            self.speak(response)\n        else:\n            self.speak(\"Sorry, I don't understand your request.\")\n\n    @staticmethod\n    def __find_pod_id(pods, pod_id):\n        for pod in pods:\n            if pod_id in pod.id:\n                return pod.text\n        return None\n\n    @staticmethod\n    def process_wolfram_string(text):\n        # Remove extra whitespace\n        text = re.sub(r\" \\s+\", r\" \", text)\n\n        # Convert | symbols to commas\n        text = re.sub(r\" \\| \", r\", \", text)\n\n        # Convert newlines to commas\n        text = re.sub(r\"\\n\", r\", \", text)\n\n        # Convert !s to factorial\n        text = re.sub(r\"!\", r\",factorial\", text)\n        return text\n\n    @staticmethod\n    def __find_num(pods, pod_num):\n        for pod in pods:\n            if pod.node.attrib['position'] == pod_num:\n                return pod.text\n        return None\n\n    def stop(self):\n        pass\n\n\ndef create_skill():\n    return WolframAlphaSkill()\n", "path": "mycroft/skills/wolfram_alpha/__init__.py"}], "after_files": [{"content": "# Copyright 2016 Mycroft AI, Inc.\n#\n# This file is part of Mycroft Core.\n#\n# Mycroft Core is free software: you can redistribute it and/or modify\n# it under the terms of the GNU General Public License as published by\n# the Free Software Foundation, either version 3 of the License, or\n# (at your option) any later version.\n#\n# Mycroft Core is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n# GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License\n# along with Mycroft Core.  If not, see <http://www.gnu.org/licenses/>.\n\n\nfrom StringIO import StringIO\nfrom os.path import dirname\n\nimport re\nimport requests\nimport wolframalpha\nfrom six.moves import urllib\n\nfrom mycroft.identity import IdentityManager\nfrom mycroft.skills.core import MycroftSkill\nfrom mycroft.util import CerberusAccessDenied\nfrom mycroft.util.log import getLogger\n\n__author__ = 'seanfitz'\n\nlogger = getLogger(__name__)\n\n\nclass EnglishQuestionParser(object):\n    \"\"\"\n    Poor-man's english question parser. Not even close to conclusive, but\n    appears to construct some decent w|a queries and responses.\n    \"\"\"\n\n    def __init__(self):\n        self.regexes = [\n            re.compile(\n                \".*(?P<QuestionWord>who|what|when|where|why|which) \"\n                \"(?P<Query1>.*) (?P<QuestionVerb>is|are|was|were) \"\n                \"(?P<Query2>.*)\"),\n            re.compile(\n                \".*(?P<QuestionWord>what)(?P<QuestionVerb>\\'s|s) \"\n                \"(?P<Query>.*)\"),\n            re.compile(\n                \".*(?P<QuestionWord>who|what|when|where|why|which) \"\n                \"(?P<QuestionVerb>\\w+) (?P<Query>.*)\")\n        ]\n\n    def _normalize(self, groupdict):\n        if 'Query' in groupdict:\n            return groupdict\n        elif 'Query1' and 'Query2' in groupdict:\n            return {\n                'QuestionWord': groupdict.get('QuestionWord'),\n                'QuestionVerb': groupdict.get('QuestionVerb'),\n                'Query': ' '.join([groupdict.get('Query1'), groupdict.get(\n                    'Query2')])\n            }\n\n    def parse(self, utterance):\n        for regex in self.regexes:\n            match = regex.match(utterance)\n            if match:\n                return self._normalize(match.groupdict())\n        return None\n\n\nclass CerberusWolframAlphaClient(object):\n    \"\"\"\n    Wolfram|Alpha v2.0 client\n    \"\"\"\n\n    def query(self, query):\n        \"\"\"\n        Query Wolfram|Alpha with query using the v2.0 API\n        \"\"\"\n        identity = IdentityManager().get()\n        bearer_token = 'Bearer %s:%s' % (identity.device_id, identity.token)\n        query = urllib.parse.urlencode(dict(input=query))\n        url = 'https://cerberus.mycroft.ai/wolframalpha/v2/query?' + query\n        headers = {'Authorization': bearer_token}\n        response = requests.get(url, headers=headers)\n        if response.status_code == 401:\n            raise CerberusAccessDenied()\n        logger.debug(response.content)\n        return wolframalpha.Result(StringIO(response.content))\n\n\nclass WolframAlphaSkill(MycroftSkill):\n    def __init__(self):\n        MycroftSkill.__init__(self, name=\"WolframAlphaSkill\")\n        self.__init_client()\n        self.question_parser = EnglishQuestionParser()\n\n    def __init_client(self):\n        key = self.config.get('api_key')\n        if key:\n            self.client = wolframalpha.Client(key)\n        else:\n            self.client = CerberusWolframAlphaClient()\n\n    def initialize(self):\n        self.init_dialog(dirname(__file__))\n        self.emitter.on('intent_failure', self.handle_fallback)\n\n    def get_result(self, res):\n        result = None\n        try:\n            result = next(res.results).text\n            return result\n        except:\n            try:\n                result = self.__find_pod_id(res.pods, 'Value')\n                if not result:\n                    result = self.__find_pod_id(\n                        res.pods, 'NotableFacts:PeopleData')\n                    if not result:\n                        result = self.__find_pod_id(\n                            res.pods, 'BasicInformation:PeopleData')\n                        if not result:\n                            result = self.__find_pod_id(res.pods, 'Definition')\n                            if not result:\n                                result = self.__find_pod_id(\n                                    res.pods, 'DecimalApproximation')\n                                if result:\n                                    result = result[:5]\n                                else:\n                                    result = self.__find_num(\n                                        res.pods, '200')\n                return result\n            except:\n                return result\n\n    def handle_fallback(self, message):\n        logger.debug(\n            \"Could not determine intent, falling back to WolframAlpha Skill!\")\n        utterance = message.metadata.get('utterance')\n        parsed_question = self.question_parser.parse(utterance)\n\n        # biding some time\n        if parsed_question:\n            self.speak(\"I am searching for \" + parsed_question.get('Query'))\n        else:\n            self.speak(\"I am searching for \" + utterance)\n        query = utterance\n        if parsed_question:\n            query = \"%s %s %s\" % (parsed_question.get('QuestionWord'),\n                                  parsed_question.get('QuestionVerb'),\n                                  parsed_question.get('Query'))\n\n        try:\n            res = self.client.query(query)\n            result = self.get_result(res)\n        except CerberusAccessDenied as e:\n            self.speak_dialog('not.paired')\n            return\n        except Exception as e:\n            logger.exception(e)\n            self.speak(\"Sorry, I don't understand your request.\")\n            return\n\n        if result:\n            input_interpretation = self.__find_pod_id(res.pods, 'Input')\n            verb = \"is\"\n            structured_syntax_regex = re.compile(\".*(\\||\\[|\\\\\\\\|\\]).*\")\n            if parsed_question:\n                if not input_interpretation or structured_syntax_regex.match(\n                        input_interpretation):\n                    input_interpretation = parsed_question.get('Query')\n                verb = parsed_question.get('QuestionVerb')\n\n            if \"|\" in result:  # Assuming \"|\" indicates a list of items\n                verb = \":\"\n\n            result = self.process_wolfram_string(result)\n            input_interpretation = \\\n                self.process_wolfram_string(input_interpretation)\n            response = \"%s %s %s\" % (input_interpretation, verb, result)\n\n            self.speak(response)\n        else:\n            self.speak(\"Sorry, I don't understand your request.\")\n\n    @staticmethod\n    def __find_pod_id(pods, pod_id):\n        for pod in pods:\n            if pod_id in pod.id:\n                return pod.text\n        return None\n\n    @staticmethod\n    def process_wolfram_string(text):\n        # Remove extra whitespace\n        text = re.sub(r\" \\s+\", r\" \", text)\n\n        # Convert | symbols to commas\n        text = re.sub(r\" \\| \", r\", \", text)\n\n        # Convert newlines to commas\n        text = re.sub(r\"\\n\", r\", \", text)\n\n        # Convert !s to factorial\n        text = re.sub(r\"!\", r\",factorial\", text)\n        return text\n\n    @staticmethod\n    def __find_num(pods, pod_num):\n        for pod in pods:\n            if pod.node.attrib['position'] == pod_num:\n                return pod.text\n        return None\n\n    def stop(self):\n        pass\n\n\ndef create_skill():\n    return WolframAlphaSkill()\n", "path": "mycroft/skills/wolfram_alpha/__init__.py"}]}