Spaces:
Runtime error
Runtime error
| from load_rock import get_rock_name_url | |
| from app_vars import * | |
| from nltk import edit_distance | |
| import gradio as g | |
| from urllib.request import urlretrieve | |
| print(__file__,rs) | |
| state = g.State( | |
| {a: b for a, b in (zip(["name", "url"], get_rock_name_url()))} | |
| | dict(correct=0, wrong=0, skipped=0, prevurl="", coft=0, qnum=1) | |
| ) | |
| def check_2_strings(a: str, b: str): | |
| return ( | |
| edit_distance(a, b, substitution_cost=5, transpositions=True) | |
| / ((len(a) + len(b))) | |
| * 100 | |
| ) | |
| def get_name( | |
| ans: str, | |
| feedback: str, | |
| ): | |
| # global state.value["name"], state.value["url"], state.value["correct"], state.value["wrong"], state.value["skipped"], state.value["prevurl"], state.value["coft"], state.value["qnum"] | |
| out = "" | |
| fb = "" | |
| stats = "" | |
| state.value["qnum"] += 1 | |
| if len(ans) >= 1: | |
| ans = ans.strip() | |
| deviance = check_2_strings(ans, state.value["name"]) | |
| if ans in ["s", "/", "skip", "n", "r"]: | |
| fb += "The answer is: " + state.value["name"] | |
| state.value["skipped"] += 1 | |
| state.value["prevurl"] = state.value["url"] | |
| elif deviance <= 26: | |
| fb += f"""Correct! - The answer is: {state.value["name"]}""" | |
| # print("Before:", state.value["url"], state.value["prevurl"], state.value["url"] == state.value["prevurl"]) | |
| if state.value["prevurl"] != state.value["url"]: | |
| state.value["coft"] += 1 | |
| # print("after:", state.value["url"], state.value["prevurl"], state.value["url"] == state.value["prevurl"]) | |
| state.value["name"], state.value["url"] = get_rock_name_url() | |
| state.value["correct"] += 1 | |
| # print("after2:", state.value["url"], state.value["prevurl"], state.value["url"] == state.value["prevurl"], "\n\n\n") | |
| else: | |
| state.value["wrong"] += 1 | |
| fb += f"\n### Wrong! The answer isn't {ans}. \n ### Press s, r, or n to see the answer." | |
| state.value["prevurl"] = state.value["url"] | |
| stats = f""" | |
| Statistic | Value | |
| ---: | :--- | |
| Correct | {state.value["correct"]} | |
| Wrong | {state.value["wrong"]} | |
| Correct on first try | {state.value["coft"]} | |
| Skipped | {state.value["skipped"]} | |
| Total | {state.value["correct"] + state.value["wrong"] + state.value["skipped"]} | |
| """ | |
| out = "" | |
| else: | |
| out = ans | |
| stats = feedback | |
| return ( | |
| state.value["url"], | |
| out, | |
| f"""## Question {state.value["qnum"]}:\n ### {fb}""", | |
| stats, | |
| rf"""### [Click here to research the rock](https://www.mindat.org/search.php?search={state.value["name"].strip().replace(" ", "%20")})""", | |
| ) | |
| with g.Blocks() as A: | |
| title = g.Markdown("# Practice Rocks and Minerals. By Aashray") | |
| with g.Row(): | |
| inp = g.Textbox( | |
| placeholder="""Enter the rock/mineral's name here. Press s, r, or n to skip the question.""", | |
| show_label=False, | |
| max_lines=1, | |
| autofocus=True, | |
| autoscroll=True, | |
| ) | |
| with g.Row() as row: | |
| with g.Column( | |
| scale=7, | |
| min_width=1000, | |
| ): | |
| img = g.ImageEditor( | |
| state.value["url"], | |
| type="PIL", | |
| # sources=[], | |
| ) | |
| with g.Column(variant="panel"): | |
| feedback = g.Markdown( | |
| f"""### Question {state.value["qnum"]}: Type in the name of the rock/mineral to get started!""" | |
| ) | |
| stats = g.Markdown( | |
| f""" | |
| Statistic | Value | |
| ---: | :--- | |
| Correct | {state.value["correct"]} | |
| Wrong | {state.value["wrong"]} | |
| Correct on first try | {state.value["coft"]} | |
| Skipped | {state.value["skipped"]} | |
| Total | {state.value["correct"] + state.value["wrong"] + state.value["skipped"]} | |
| """ | |
| ) | |
| link = g.Markdown( | |
| f"""### [Click here to research the rock](https://www.mindat.org/search.php?search={state.value["name"].strip().replace(" ", "%20")})""" | |
| ) | |
| inp.submit( | |
| fn=get_name, | |
| inputs=[inp, stats], | |
| outputs=[ | |
| img, | |
| inp, | |
| feedback, | |
| stats, | |
| link, | |
| ], | |
| ) | |
| A.launch( | |
| inbrowser=True, | |
| ) | |