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)
예제 #2
0
    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()
예제 #4
0
 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()
예제 #5
0
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
        }
예제 #6
0
파일: engine.py 프로젝트: Orbifold/Wolfy
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()