def repeat(): """ Repeat the last action that was done, if it is still stored in "it". No argument. Return a string as a response. """ it = paul.get_it() if it.startswith('tell application "System Events" to key code'): paul.run_script(it, language="applescript") return "Ok." elif it.startswith("set volume output volume (output volume of "): paul.run_script(it, language="applescript") return "Ok." else: return "What? I don't understand."
def process(sentence): ''' Process the sentence. ''' sentence.replace_it() eqns = make_equations(sentence) if len(eqns) == 0: return "I'm not sure what you want me try try and solve. Sorry!" subs = sentence.has_one_of(["sub", "substitute", "solve"]) rearrange = sentence.has_one_of(["rearrange", "solve"]) if subs: rearrange = False if (paul.get_it() and paul.Sentence(paul.get_it()).has_one_of("+/^*-=1234567890")): eqns.append(paul.get_it()) if len(eqns) < 2 else 0 paul.log(eqns) eqn_string = eqns[0] if subs: try: eqn_string = eqns[1] except IndexError: eqn_string = eqns[0] if rearrange: for e in eqns: if len(e) > 1: eqn_string = e break paul.log("SUBS:", subs, "REARRANGE:", rearrange) paul.log("EQUATION:", eqn_string) had_equals = True if not paul.has_word(eqn_string, "="): eqn_string = "y=" + eqn_string had_equals = False elif eqn_string.strip()[0] == "=": eqn_string = "y" + eqn_string paul.log("EQUATION:", eqn_string) # try: eqn = Equation(eqn_string) # except: # return "Something went horribly wrong when I tried to math. Oops." # if subs and len(eqns) > 1: eq2 = Equation(eqns[0]) if type(eq2.head.right.value) == float: eqn.substitute((eq2.head.left.value, eq2.head.right.value)) elif type(eqn.head.right.value) == float: eq2.substitute((eqn.head.left.value, eqn.head.right.value)) eqn, eq2 = eq2, eqn else: url = "http://www.wolframalpha.com/input/?i=" query = "sub {} into {}".format(eq2, eqn) query.replace("+", "%2D").replace("=", "%3D").replace("/", "%2F") paul.open_URL(url+query) return '''I was unsuccessful in finding the solution:\n{}\n{}'''.format(eq2, eqn) if rearrange: targ = "x" targets = sentence.keywords() for word, _ in targets: if len(word) == 1: targ = word try: eqn.rearrange_linear_for(targ) except RuntimeError: url = "http://www.wolframalpha.com/input/?i=" query = "rearrange {} for {}".format(eqn, targ) query.replace("+", "%2D").replace("=", "%3D").replace("/", "%2F") paul.open_URL(url+query) return "Oh dear, not a clue. Try this instead." result = str(eqn) if not had_equals: result = result[4:] paul.set_it(result) try: if result[0] == "(" and result[-1] == ")": result = result[1:-1] except IndexError: pass return result