File size: 1,905 Bytes
58a9bad
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
#!/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()