44This is a minimal example so we can discuss feasiblity.
55"""
66from 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
88from mathics .core .expression import Expression
9+ from mathics .core .parser import parse , MathicsSingleLineFeeder
910from mathics .core .symbols import SymbolDivide
1011from mathics .core .systemsymbols import (
12+ SymbolFractionBox ,
1113 SymbolMakeBoxes ,
1214 SymbolPower ,
1315 SymbolSqrt ,
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
5162def apply_formatvalues_rules (expr , evaluation ):
@@ -71,16 +82,23 @@ def apply_formatvalues_rules(expr, evaluation):
7182# Begin demo code.
7283
7384for 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