def test_stop_start_restart_status(self): session = WolframLanguageSession(kernel_path) self.assertFalse(session.started) self.assertTrue(session.stopped) session.start() self.assertTrue(session.started) self.assertFalse(session.stopped) session.stop() self.assertFalse(session.started) self.assertTrue(session.stopped) session.restart() self.assertTrue(session.started) self.assertFalse(session.stopped) session.terminate() self.assertFalse(session.started) self.assertTrue(session.stopped) session = WolframLanguageSession(kernel_path) session.stop() self.assertFalse(session.started) self.assertTrue(session.stopped) session.terminate() self.assertFalse(session.started) self.assertTrue(session.stopped)
def test_stop_start_restart_status(self): session = WolframLanguageSession(self.KERNEL_PATH) self.assertFalse(session.started) self.assertTrue(session.stopped) session.start() self.assertTrue(session.started) self.assertFalse(session.stopped) session.stop() self.assertFalse(session.started) self.assertTrue(session.stopped) session.restart() self.assertTrue(session.started) self.assertFalse(session.stopped) session.terminate() self.assertFalse(session.started) self.assertTrue(session.stopped) session = WolframLanguageSession(self.KERNEL_PATH) session.stop() self.assertFalse(session.started) self.assertTrue(session.stopped) session.terminate() self.assertFalse(session.started) self.assertTrue(session.stopped)
def test_terminated_session_autorestart(self): session = None try: session = WolframLanguageSession(kernel_path) session.start() session.stop() res = session.evaluate("1+1") self.assertEqual(res, 2) finally: if session: session.terminate()
def test_terminated_session_autorestart(self): session = None try: session = WolframLanguageSession(self.KERNEL_PATH) session.start() session.stop() res = session.evaluate('1+1') self.assertEqual(res, 2) finally: if session: session.terminate()
class SequenceTagger: def __init__(self, wl_kernel=None): """Initialize the SentenceTagger wl_kernel -- location of Wolfram kernel """ self.session = WolframLanguageSession() if wl_kernel == None else WolframLanguageSession(wl_kernel) def close(self): """Stop the Wolfram Kernel associated with this tagger""" self.session.stop() def predict(self, text: str, **kwargs) -> dict: """Get text entities in text text -- text to get entities from Keyword arguments: entity_types -- list of entity types to include """ forms = wl.System.Automatic if "entity_types" in kwargs: forms = wl.System.List(*kwargs["entity_types"]) expr = wl.System.TextContents(text, forms, wl.System.All) response = self.session.evaluate(expr) entities = [] for entity in response[0]: entities.append({ "text": entity["String"], "start_pos": entity["Position"][0] - 1, "end_pos": entity["Position"][1], "type": entity["Type"], "confidence": entity["Probability"], "interpretation": entity["Interpretation"] }) return { "text": text, "entities": entities }
class Engine: def __init__(self): config = get_config() wolfram_path = config.get("DEFAULT", "WOLFRAM_PATH") self.image_path = os.path.join(os.getcwd(), 'static', 'city') atexit.register(self.cleanup) if wolfram_path is None or len(wolfram_path) == 0: self.session = WolframLanguageSession() print("Wolfram Engine session opened on default path.") else: self.session = WolframLanguageSession(wolfram_path) print(f"Wolfram Engine session opened on '{wolfram_path}'.") self._define_wolfram_functions() def _define_wolfram_functions(self): self.get_weather = self.session.function(wlexpr('<|"Temperature" -> WeatherData[#, "Temperature"], "WindSpeed" ->WeatherData[#, "WindSpeed"],"Pressure"-> WeatherData[#,"Pressure"]|>&')) self.get_city = self.session.function(wlexpr('Module[{cities}, cities = TextCases[#, "City"];If[Length[cities] > 0, First[cities], ""]]&')) def test(self): self.check_session() return self.session.evaluate(wlexpr('NIntegrate[Sin[Sin[x]], {x, 0, 2}]')) def get_city_image(self, name): # search existing images if present lname = str.lower(name) for file in os.listdir(self.image_path): if file.endswith(".png"): if file == f"{lname}.png": print(f"Found image for '{name}' in cache.") return # get the image via websearch graphic = self.session.evaluate(wlexpr(f'WebImageSearch["{name}", "Images", MaxItems -> 1][[1]]')) path = os.path.join(self.image_path, f"{lname}.png") png_export = wl.Export(path, graphic, "PNG") return self.session.evaluate(png_export) def get_weather_info(self, text) -> dict: """ Returns a dictionary with some weather info for the first city found in the given (natural language) text. :param text: any text """ self.check_session() if text is None or len(text) == 0: return {} city = self.get_city(text) if city is None or len(city) == 0: return {} print(f"Found city: {city}") found = self.get_weather(city) if isinstance(found, dict) and found["Temperature"].args[0] != "NotAvailable": self.get_city_image(city) return { "Input": text, "City": city, "Temperature": found["Temperature"].args[0], "WindSpeed": found["WindSpeed"].args[0], "Pressure": found["Pressure"].args[0], "Info": self.session.evaluate(wlexpr(f'TextSentences[WikipediaData["{city}"]][[;; 5]]'))[0] } else: return {} def check_session(self): if self.session is None: raise Exception("The Engine is not present.") # noinspection PyBroadException def cleanup(self): """ Note that there is no way to catch the SIGKILL and stop the engine gracefully if this happens. :return: """ try: if self.session is not None: self.session.stop() print("Wolfram Engine stopped.") except Exception: pass
from wolframclient.evaluation import WolframLanguageSession from wolframclient.language import wl, wlexpr session = WolframLanguageSession(WOLFRAM_KERNEL_LOCATION) connection = sqlite3.connect(DATABASE_FILE) db = connection.cursor() db.execute("SELECT id, name, gender FROM travelers") travelers = db.fetchall() for traveler in travelers: if traveler[2] == None: #traveler[2] is gender name = traveler[1] traveler_id = traveler[0] # The following evaluates # Classify["NameGender", First[TextCases[name, "GivenName"]]] # in Wolfram Kernel gender = session.evaluate( wl.System.Classify( "NameGender", wl.System.First(wl.System.TextCases(name, "GivenName")))) if type(gender) is str and gender != "Indeterminate": db.execute( """UPDATE travelers SET gender = ? WHERE id = ?""", (gender, traveler_id)) connection.commit() session.stop()