Skip to content

Commit 071da92

Browse files
committed
More honest test
1 parent 37e0a70 commit 071da92

1 file changed

Lines changed: 27 additions & 9 deletions

File tree

test/formtest.py

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,12 @@
44
This is a minimal example so we can discuss feasiblity.
55
"""
66
from mathics.builtin.forms.base import box
7-
from mathics.core.atoms import IntegerM1, Integer1, Rational
7+
from mathics.core.atoms import IntegerM1, Integer1, Integer2, Rational
88
from mathics.core.expression import Expression
9+
from mathics.core.parser import parse, MathicsSingleLineFeeder
910
from mathics.core.symbols import SymbolDivide
1011
from mathics.core.systemsymbols import (
12+
SymbolFractionBox,
1113
SymbolMakeBoxes,
1214
SymbolPower,
1315
SymbolSqrt,
@@ -32,20 +34,29 @@
3234
# It is not intended to be used in a final implementation.
3335

3436

35-
def sqrt_boxform_fn(expr):
37+
def fractionbox_fn(expr):
38+
# To be continued...
39+
return Expression(SymbolFractionBox, *expr.elements)
40+
41+
42+
def sqrtbox_fn(expr):
3643
return Expression(SymbolSqrt, expr.elements[0])
3744

3845

39-
def power_boxform_fn(expr):
46+
def powerbox_fn(expr):
4047
new_expr = expr.elements[0]
4148
if new_expr.elements[-1] == IntegerM1:
4249
return Expression(SymbolDivide, Integer1, new_expr.elements[0])
43-
elif new_expr.elements[-1] == Rational(1, 2):
50+
elif new_expr.elements[-1] in (Rational(1, 2), Integer1 * (Integer2**IntegerM1)):
4451
return Expression(SymbolSqrt, new_expr.elements[0])
4552
return new_expr
4653

4754

48-
boxform_rules = {SymbolSqrt: sqrt_boxform_fn, SymbolPower: power_boxform_fn}
55+
boxform_rules = {
56+
# SymbolTimes: fractionbox_fn,
57+
SymbolPower: powerbox_fn,
58+
SymbolSqrt: sqrtbox_fn,
59+
}
4960

5061

5162
def apply_formatvalues_rules(expr, evaluation):
@@ -71,16 +82,23 @@ def apply_formatvalues_rules(expr, evaluation):
7182
# Begin demo code.
7283

7384
for expr_str in (
74-
"1 / x", # Show off "Division" boxing
85+
# FIXME;
86+
# "1 / x", # Show off "Division" boxing
7587
"a ^ b", # Show off "Power" boxing
76-
"Sqrt[a]", # Show off "Square-root boxing"
88+
"Sqrt[a]", # "Square-root boxing"
89+
"a ^ (1/2)", # "Square-root boxing"
7790
):
78-
expr = session.evaluate(expr_str)
79-
print("Input expression: ", expr)
91+
print("expression: ", expr_str)
92+
93+
# Parse, but don't evaluate expression.
94+
expr = parse(session.definitions, MathicsSingleLineFeeder(expr_str))
95+
print("Parsed expression: ", expr)
8096

8197
# Here is how Mathics currently evaluates MakeBoxes
8298
boxed_expr = Expression(SymbolMakeBoxes, expr, SymbolStandardForm)
8399
print("Mathics MakeBoxes: ", boxed_expr)
100+
101+
# Evaluate to get final printed/rendered form
84102
print("Eval'd Makeboxes: ", boxed_expr.evaluate(session.evaluation))
85103

86104
# Here is how Mathics might better box an expression.

0 commit comments

Comments
 (0)