File size: 4,957 Bytes
cc646d3 5c1a054 cc646d3 5c1a054 cc646d3 5c1a054 cc646d3 5c1a054 cc646d3 5c1a054 cc646d3 5c1a054 cc646d3 5c1a054 cc646d3 5c1a054 cc646d3 5c1a054 cc646d3 5c1a054 cc646d3 5c1a054 cc646d3 5c1a054 cc646d3 5c1a054 cc646d3 5c1a054 cc646d3 5c1a054 cc646d3 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 |
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()
|