CharlesCNorton
Add gate-level calculator UI and CLI expr mode
58a9bad
#!/usr/bin/env python3
"""
Hugging Face Space: gate-level calculator for threshold-calculus.
"""
import gradio as gr
from calculator import ThresholdCalculator, bits_to_int, float16_bits_to_float
calc = ThresholdCalculator("arithmetic.safetensors")
def eval_expression(expr: str):
expr = (expr or "").strip()
if not expr:
return "", "", "", ""
try:
result = calc.evaluate_expr(expr)
out_int = bits_to_int(result.bits)
out_float = float16_bits_to_float(out_int)
return (
f"{out_float}",
f"0x{out_int:04x}",
f"{result.gates_evaluated}",
f"{result.elapsed_s:.4f}s",
)
except Exception as exc:
return f"ERROR: {exc}", "", "", ""
with gr.Blocks(title="Threshold Calculus Calculator") as demo:
gr.Markdown(
"# Threshold Calculus Calculator\n"
"Pure gate-level evaluation of float16 arithmetic (IEEE-754 half). "
"All results are float16 and may be rounded."
)
expr = gr.Textbox(
label="Expression",
placeholder="e.g., 1 + 1, sin(pi / 2), exp(ln(2))",
)
run = gr.Button("Evaluate")
out_val = gr.Textbox(label="Float16 Result", interactive=False)
out_bits = gr.Textbox(label="Result Bits (hex)", interactive=False)
out_gates = gr.Textbox(label="Gates Evaluated", interactive=False)
out_time = gr.Textbox(label="Elapsed", interactive=False)
run.click(eval_expression, inputs=[expr], outputs=[out_val, out_bits, out_gates, out_time])
expr.submit(eval_expression, inputs=[expr], outputs=[out_val, out_bits, out_gates, out_time])
gr.Markdown(
"Notes:\n"
"- Functions: sin, cos, tan, tanh, sqrt, rsqrt, exp, ln, log2, abs, neg\n"
"- Constants: pi, e, inf, nan\n"
"- Pow uses exp(b*ln(a)); negative bases yield NaN."
)
if __name__ == "__main__":
demo.launch()