Skip to content

Commit 760e04e

Browse files
committed
mypy
1 parent 845fb99 commit 760e04e

File tree

2 files changed

+71
-52
lines changed

2 files changed

+71
-52
lines changed

mathics/core/convert/prettyprint.py

Lines changed: 59 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
This module builts the 2D string associated to the OutputForm
33
"""
44

5+
from typing import Any, Callable, Dict, List, Optional, Union
6+
57
from mathics.core.atoms import (
68
Integer,
79
Integer1,
@@ -49,7 +51,7 @@
4951
#### Functions that convert Expressions in TextBlock
5052

5153

52-
expr_to_2d_text_map = {}
54+
expr_to_2d_text_map: Dict[str, Callable] = {}
5355

5456

5557
# This Exception if the expression should
@@ -67,16 +69,16 @@ class IsNot2DArray(Exception):
6769

6870

6971
def expression_to_2d_text(
70-
expr, evaluation: Evaluation, form=SymbolStandardForm, **kwargs
72+
expr: BaseElement, evaluation: Evaluation, form=SymbolStandardForm, **kwargs
7173
):
7274
"""
7375
Build a 2d text from an `Expression`
7476
"""
7577
## TODO: format the expression
76-
format_expr = do_format(expr, evaluation, SymbolOutputForm)
78+
format_expr: Expression = do_format(expr, evaluation, SymbolOutputForm) # type: ignore
7779

7880
# Strip HoldForm
79-
while format_expr.has_form("HoldForm", 1):
81+
while format_expr.has_form("HoldForm", 1): # type: ignore
8082
format_expr = format_expr.elements[0]
8183

8284
lookup_name = format_expr.get_head().get_lookup_name()
@@ -92,12 +94,13 @@ def expression_to_2d_text(
9294

9395

9496
def _default_expression_to_2d_text(
95-
expr: BaseElement, evaluation: Evaluation, form: Symbol, **kwargs
97+
expr: Expression, evaluation: Evaluation, form: Symbol, **kwargs
9698
) -> TextBlock:
9799
"""
98100
Default representation of a function
99101
"""
100-
head = expression_to_2d_text(expr.head, evaluation, form, **kwargs)
102+
expr_head = expr.head
103+
head = expression_to_2d_text(expr_head, evaluation, form, **kwargs)
101104
comma = TextBlock(", ")
102105
elements = [expression_to_2d_text(elem, evaluation) for elem in expr.elements]
103106
result = elements.pop(0) if elements else TextBlock(" ")
@@ -122,7 +125,7 @@ def _divide(num, den, evaluation, form, **kwargs):
122125

123126

124127
def _strip_1_parm_expression_to_2d_text(
125-
expr: BaseElement, evaluation: Evaluation, form: Symbol, **kwargs
128+
expr: Expression, evaluation: Evaluation, form: Symbol, **kwargs
126129
) -> TextBlock:
127130
if len(expr.elements) != 1:
128131
raise _WrongFormattedExpression
@@ -134,7 +137,7 @@ def _strip_1_parm_expression_to_2d_text(
134137

135138

136139
def derivative_expression_to_2d_text(
137-
expr: BaseElement, evaluation: Evaluation, form: Symbol, **kwargs
140+
expr: Expression, evaluation: Evaluation, form: Symbol, **kwargs
138141
) -> TextBlock:
139142
"""Derivative operator"""
140143
head = expr.get_head()
@@ -175,7 +178,7 @@ def derivative_expression_to_2d_text(
175178

176179

177180
def divide_expression_to_2d_text(
178-
expr: BaseElement, evaluation: Evaluation, form: Symbol, **kwargs
181+
expr: Expression, evaluation: Evaluation, form: Symbol, **kwargs
179182
) -> TextBlock:
180183
if len(expr.elements) != 2:
181184
raise _WrongFormattedExpression
@@ -187,7 +190,7 @@ def divide_expression_to_2d_text(
187190

188191

189192
def graphics(
190-
expr: BaseElement, evaluation: Evaluation, form: Symbol, **kwargs
193+
expr: Expression, evaluation: Evaluation, form: Symbol, **kwargs
191194
) -> TextBlock:
192195
return TextBlock("-Graphics-")
193196

@@ -196,7 +199,7 @@ def graphics(
196199

197200

198201
def graphics3d(
199-
expr: BaseElement, evaluation: Evaluation, form: Symbol, **kwargs
202+
expr: Expression, evaluation: Evaluation, form: Symbol, **kwargs
200203
) -> TextBlock:
201204
return TextBlock("-Graphics3D-")
202205

@@ -205,7 +208,7 @@ def graphics3d(
205208

206209

207210
def grid_expression_to_2d_text(
208-
expr: BaseElement, evaluation: Evaluation, form: Symbol, **kwargs
211+
expr: Expression, evaluation: Evaluation, form: Symbol, **kwargs
209212
) -> TextBlock:
210213
if len(expr.elements) == 0:
211214
raise IsNotGrid
@@ -235,15 +238,17 @@ def grid_expression_to_2d_text(
235238
expr_to_2d_text_map["System`Grid"] = grid_expression_to_2d_text
236239

237240

238-
def integer_expression_to_2d_text(n, evaluation, form, **kwargs):
241+
def integer_expression_to_2d_text(
242+
n: Integer, evaluation: Evaluation, form: Symbol, **kwargs
243+
):
239244
return TextBlock(str(n.value))
240245

241246

242247
expr_to_2d_text_map["System`Integer"] = integer_expression_to_2d_text
243248

244249

245250
def integrate_expression_to_2d_text(
246-
expr: BaseElement, evaluation: Evaluation, form: Symbol, **kwargs
251+
expr: Expression, evaluation: Evaluation, form: Symbol, **kwargs
247252
) -> TextBlock:
248253
elems = list(expr.elements)
249254
if len(elems) > 2 or not kwargs.get("2d", False):
@@ -271,7 +276,7 @@ def integrate_expression_to_2d_text(
271276

272277

273278
def list_expression_to_2d_text(
274-
expr: BaseElement, evaluation: Evaluation, form: Symbol, **kwargs
279+
expr: Expression, evaluation: Evaluation, form: Symbol, **kwargs
275280
) -> TextBlock:
276281
return (
277282
TextBlock("{")
@@ -288,18 +293,22 @@ def list_expression_to_2d_text(
288293
expr_to_2d_text_map["System`List"] = list_expression_to_2d_text
289294

290295

291-
def mathmlform_expression_to_2d_text(expr, evaluation, form, **kwargs) -> TextBlock:
296+
def mathmlform_expression_to_2d_text(
297+
expr: Expression, evaluation: Evaluation, form: Symbol, **kwargs
298+
) -> TextBlock:
292299
# boxes = format_element(expr.elements[0], evaluation, form)
293300
boxes = Expression(
294301
Symbol("System`MakeBoxes"), expr.elements[0], SymbolStandardForm
295302
).evaluate(evaluation)
296-
return TextBlock(boxes.boxes_to_mathml())
303+
return TextBlock(boxes.boxes_to_mathml()) # type: ignore[union-attr]
297304

298305

299306
expr_to_2d_text_map["System`MathMLForm"] = mathmlform_expression_to_2d_text
300307

301308

302-
def matrixform_expression_to_2d_text(expr, evaluation, form, **kwargs) -> TextBlock:
309+
def matrixform_expression_to_2d_text(
310+
expr: Expression, evaluation: Evaluation, form: Symbol, **kwargs
311+
) -> TextBlock:
303312
# return parenthesize(tableform_expression_to_2d_text(expr, evaluation, form, **kwargs))
304313
return tableform_expression_to_2d_text(expr, evaluation, form, **kwargs)
305314

@@ -308,7 +317,7 @@ def matrixform_expression_to_2d_text(expr, evaluation, form, **kwargs) -> TextBl
308317

309318

310319
def plus_expression_to_2d_text(
311-
expr: BaseElement, evaluation: Evaluation, form: Symbol, **kwargs
320+
expr: Expression, evaluation: Evaluation, form: Symbol, **kwargs
312321
) -> TextBlock:
313322
elements = expr.elements
314323
result = TextBlock("")
@@ -351,7 +360,7 @@ def plus_expression_to_2d_text(
351360
## TODO: handle complex numbers?
352361
else:
353362
elem_txt = expression_to_2d_text(elem, evaluation, form, **kwargs)
354-
if compare_precedence(elem, 310) < 0:
363+
if (compare_precedence(elem, 310) or -1) < 0:
355364
elem_txt = parenthesize(elem_txt)
356365
result = result + " + " + elem_txt
357366
elif i == 0 or (
@@ -372,7 +381,7 @@ def plus_expression_to_2d_text(
372381

373382

374383
def power_expression_to_2d_text(
375-
expr: BaseElement, evaluation: Evaluation, form: Symbol, **kwargs
384+
expr: Expression, evaluation: Evaluation, form: Symbol, **kwargs
376385
):
377386
if len(expr.elements) != 2:
378387
raise _WrongFormattedExpression
@@ -399,7 +408,7 @@ def power_expression_to_2d_text(
399408

400409

401410
def pre_pos_infix_expression_to_2d_text(
402-
expr: BaseElement, evaluation: Evaluation, form: Symbol, **kwargs
411+
expr: Expression, evaluation: Evaluation, form: Symbol, **kwargs
403412
) -> TextBlock:
404413
elements = expr.elements
405414
if not (0 <= len(elements) <= 4):
@@ -520,7 +529,7 @@ def pre_pos_infix_expression_to_2d_text(
520529

521530

522531
def precedenceform_expression_to_2d_text(
523-
expr: BaseElement, evaluation: Evaluation, form: Symbol, **kwargs
532+
expr: Expression, evaluation: Evaluation, form: Symbol, **kwargs
524533
) -> TextBlock:
525534
if len(expr.elements) == 2:
526535
return expression_to_2d_text(expr.elements[0], evaluation, form, **kwargs)
@@ -530,27 +539,29 @@ def precedenceform_expression_to_2d_text(
530539
expr_to_2d_text_map["System`PrecedenceForm"] = precedenceform_expression_to_2d_text
531540

532541

533-
def rational_expression_to_2d_text(n, evaluation, form, **kwargs):
542+
def rational_expression_to_2d_text(
543+
n: Union[Rational, Expression], evaluation: Evaluation, form: Symbol, **kwargs
544+
):
534545
if n.has_form("Rational", 2):
535-
num, den = n.elements
546+
num, den = n.elements # type: ignore[union-attr]
536547
else:
537-
num, den = n.numerator(), n.denominator()
548+
num, den = n.numerator(), n.denominator() # type: ignore[union-attr]
538549
return _divide(num, den, evaluation, form, **kwargs)
539550

540551

541552
expr_to_2d_text_map["System`Rational"] = rational_expression_to_2d_text
542553

543554

544-
def real_expression_to_2d_text(n, evaluation, form, **kwargs):
545-
str_n = n.make_boxes("System`OutputForm").boxes_to_text()
555+
def real_expression_to_2d_text(n: Real, evaluation: Evaluation, form: Symbol, **kwargs):
556+
str_n = n.make_boxes("System`OutputForm").boxes_to_text() # type: ignore[attr-defined]
546557
return TextBlock(str(str_n))
547558

548559

549560
expr_to_2d_text_map["System`Real"] = real_expression_to_2d_text
550561

551562

552563
def sqrt_expression_to_2d_text(
553-
expr: BaseElement, evaluation: Evaluation, form: Symbol, **kwargs
564+
expr: Expression, evaluation: Evaluation, form: Symbol, **kwargs
554565
) -> TextBlock:
555566
if not 1 <= len(expr.elements) <= 2:
556567
raise _WrongFormattedExpression
@@ -568,7 +579,7 @@ def sqrt_expression_to_2d_text(
568579

569580

570581
def subscript_expression_to_2d_text(
571-
expr: BaseElement, evaluation: Evaluation, form: Symbol, **kwargs
582+
expr: Expression, evaluation: Evaluation, form: Symbol, **kwargs
572583
) -> TextBlock:
573584
if len(expr.elements) != 2:
574585
raise _WrongFormattedExpression
@@ -586,7 +597,7 @@ def subscript_expression_to_2d_text(
586597

587598

588599
def subsuperscript_expression_to_2d_text(
589-
expr: BaseElement, evaluation: Evaluation, form: Symbol, **kwargs
600+
expr: Expression, evaluation: Evaluation, form: Symbol, **kwargs
590601
) -> TextBlock:
591602
if len(expr.elements) != 3:
592603
raise _WrongFormattedExpression
@@ -604,7 +615,7 @@ def subsuperscript_expression_to_2d_text(
604615

605616

606617
def string_expression_to_2d_text(
607-
expr: BaseElement, evaluation: Evaluation, form: Symbol, **kwargs
618+
expr: String, evaluation: Evaluation, form: Symbol, **kwargs
608619
) -> TextBlock:
609620
return TextBlock(expr.value)
610621

@@ -613,7 +624,7 @@ def string_expression_to_2d_text(
613624

614625

615626
def stringform_expression_to_2d_text(
616-
expr: BaseElement, evaluation: Evaluation, form: Symbol, **kwargs
627+
expr: Expression, evaluation: Evaluation, form: Symbol, **kwargs
617628
) -> TextBlock:
618629
strform = expr.elements[0]
619630
if not isinstance(strform, String):
@@ -667,7 +678,7 @@ def stringform_expression_to_2d_text(
667678

668679

669680
def superscript_expression_to_2d_text(
670-
expr: BaseElement, evaluation: Evaluation, form: Symbol, **kwargs
681+
expr: Expression, evaluation: Evaluation, form: Symbol, **kwargs
671682
) -> TextBlock:
672683
elements = expr.elements
673684
if len(elements) != 2:
@@ -694,15 +705,17 @@ def superscript_expression_to_2d_text(
694705
expr_to_2d_text_map["System`Superscript"] = superscript_expression_to_2d_text
695706

696707

697-
def symbol_expression_to_2d_text(symb, evaluation, form, **kwargs):
708+
def symbol_expression_to_2d_text(
709+
symb: Symbol, evaluation: Evaluation, form: Symbol, **kwargs
710+
):
698711
return TextBlock(evaluation.definitions.shorten_name(symb.name))
699712

700713

701714
expr_to_2d_text_map["System`Symbol"] = symbol_expression_to_2d_text
702715

703716

704717
def tableform_expression_to_2d_text(
705-
expr: BaseElement, evaluation: Evaluation, form: Symbol, **kwargs
718+
expr: Expression, evaluation: Evaluation, form: Symbol, **kwargs
706719
) -> TextBlock:
707720
return grid_expression_to_2d_text(expr, evaluation, form)
708721

@@ -711,24 +724,24 @@ def tableform_expression_to_2d_text(
711724

712725

713726
def texform_expression_to_2d_text(
714-
expr: BaseElement, evaluation: Evaluation, form: Symbol, **kwargs
727+
expr: Expression, evaluation: Evaluation, form: Symbol, **kwargs
715728
) -> TextBlock:
716729
# boxes = format_element(expr.elements[0], evaluation, form)
717730
boxes = Expression(
718731
Symbol("System`MakeBoxes"), expr.elements[0], SymbolStandardForm
719732
).evaluate(evaluation)
720-
return TextBlock(boxes.boxes_to_tex())
733+
return TextBlock(boxes.boxes_to_tex()) # type: ignore
721734

722735

723736
expr_to_2d_text_map["System`TeXForm"] = texform_expression_to_2d_text
724737

725738

726739
def times_expression_to_2d_text(
727-
expr: BaseElement, evaluation: Evaluation, form: Symbol, **kwargs
740+
expr: Expression, evaluation: Evaluation, form: Symbol, **kwargs
728741
) -> TextBlock:
729742
elements = expr.elements
730-
num = []
731-
den = []
743+
num: List[BaseElement] = []
744+
den: List[BaseElement] = []
732745
# First, split factors with integer, negative powers:
733746
for elem in elements:
734747
if elem.has_form("Power", 2):
@@ -745,8 +758,9 @@ def times_expression_to_2d_text(
745758
den.append(elem.denominator())
746759
continue
747760
elif elem.has_form("Rational", 2):
748-
num.append(elem.elements[0])
749-
den.append(elem.elements[1])
761+
elem_elements = elem.elements
762+
num.append(elem_elements[0])
763+
den.append(elem_elements[1])
750764
continue
751765

752766
num.append(elem)
@@ -768,7 +782,7 @@ def times_expression_to_2d_text(
768782
return expression_to_2d_text(num[0], evaluation, form, **kwargs)
769783

770784
prefactor = 1
771-
result = TextBlock("")
785+
result: TextBlock = TextBlock("")
772786
for i, elem in enumerate(num):
773787
if elem is IntegerM1:
774788
prefactor *= -1
@@ -779,7 +793,7 @@ def times_expression_to_2d_text(
779793

780794
elem_txt = expression_to_2d_text(elem, evaluation, form, **kwargs)
781795
if compare_precedence(elem, 400):
782-
elem = parenthesize(elem_txt)
796+
elem_txt = parenthesize(elem_txt)
783797
if i == 0:
784798
result = elem_txt
785799
else:

0 commit comments

Comments
 (0)