admin
2 en
5c1a054
raw
history blame
4.96 kB
import os
import gradio as gr
from sympy.core.numbers import Rational
from solution import BadInput, solutions
def generate_md(args_dict, name):
try:
ans_latex = solutions[name](**args_dict).get_latex_ans()
except BadInput as e:
return f"Incorrectly entered. Please enter a valid number: {e}"
return f"Note that $${ans_latex}$$ QED"
def float_to_fraction(x):
x_str = "{0:.10f}".format(x).rstrip("0").rstrip(".") # 移除小数点后的无效零
# 检查是否为整数
if "." not in x_str:
return Rational(x_str), Rational(1)
# 分割整数部分和小数部分
integer_part, decimal_part = x_str.split(".")
decimal_digits = len(decimal_part)
# 构造分子和分母
numerator = int(integer_part + decimal_part)
denominator = 10**decimal_digits
# 简化分数
gcd_value = 1
a = numerator
b = denominator
while b != 0:
a, b = b, a % b
gcd_value = a
p = Rational(numerator // gcd_value)
q = Rational(denominator // gcd_value)
return p, q
def infer_pi(p, q):
if q == 0:
return "The denominator can not be 0 !"
p, q = float_to_fraction(p / q)
args_dict = {"p": p, "q": q}
return generate_md(args_dict, "π")
def infer_e(p, q):
if q == 0:
return "The denominator can not be 0 !"
p, q = float_to_fraction(p / q)
args_dict = {"p": p, "q": q}
return generate_md(args_dict, "e")
def infer_eq(q1, q2, u, v):
if q2 == 0 or v == 0:
return "The denominator can not be 0 !"
q1, q2 = float_to_fraction(q1 / q2)
u, v = float_to_fraction(u / v)
args_dict = {"q1": q1, "q2": q2, "u": u, "v": v}
return generate_md(args_dict, "e^q")
def infer_pin(n: int, p, q):
if q == 0:
return "The denominator can not be 0 !"
p, q = float_to_fraction(p / q)
args_dict = {"n": n, "p": p, "q": q}
return generate_md(args_dict, "π^n")
if __name__ == "__main__":
os.chdir(os.path.dirname(__file__))
for file_name in os.listdir("solutions"):
if not file_name.endswith(".py"):
continue
__import__(f"solutions.{file_name[:-3]}")
with gr.Blocks() as demo:
gr.Markdown("# Compare sizes by 'Note that' proof")
with gr.Tabs():
with gr.TabItem("π"):
gr.Interface(
fn=infer_pi,
inputs=[
gr.Number(label="p", value=314),
gr.Number(label="q", value=100),
],
outputs=gr.Markdown(
value="#### Proof result",
show_copy_button=True,
container=True,
min_height=122,
),
title="Compare π and p/q",
allow_flagging="never",
)
with gr.TabItem("e"):
gr.Interface(
fn=infer_e,
inputs=[
gr.Number(label="p", value=2718),
gr.Number(label="q", value=1000),
],
outputs=gr.Markdown(
value="#### Proof result",
show_copy_button=True,
container=True,
min_height=122,
),
title="Compare e and p/q",
allow_flagging="never",
)
with gr.TabItem("e^q"):
gr.Interface(
fn=infer_eq,
inputs=[
gr.Number(label="p", value=3),
gr.Number(label="q", value=4),
gr.Number(label="u", value=2117),
gr.Number(label="v", value=1000),
],
outputs=gr.Markdown(
value="#### Proof result",
show_copy_button=True,
container=True,
min_height=122,
),
title="Compare e^(p/q) and u/v",
allow_flagging="never",
)
with gr.TabItem("π^n"):
gr.Interface(
fn=infer_pin,
inputs=[
gr.Number(label="n", value=3, step=1),
gr.Number(label="p", value=31),
gr.Number(label="q", value=1),
],
outputs=gr.Markdown(
value="#### Proof result",
show_copy_button=True,
container=True,
min_height=122,
),
title="Compare π^n and p/q",
allow_flagging="never",
)
demo.launch()