Skip to content

Commit 827b8b8

Browse files
committed
Adjust builtins_precedence and doc parenthesize
We should be using Symbols insead of string where possible. builtins_precedence is really used in eval/makeboxes so it is defined there. It is just initialized in `mathics.buitins`.
1 parent 385c5fb commit 827b8b8

File tree

2 files changed

+17
-7
lines changed

2 files changed

+17
-7
lines changed

mathics/builtin/__init__.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@
3636
mathics_to_python,
3737
)
3838
from mathics.core.pattern import pattern_objects
39+
from mathics.core.symbols import Symbol
40+
from mathics.eval.makeboxes import builtins_precedence
3941
from mathics.settings import ENABLE_FILES_MODULE
4042
from mathics.version import __version__ # noqa used in loading to check consistency.
4143

@@ -60,7 +62,7 @@ def add_builtins(new_builtins):
6062
# print("XXX1", sympy_name)
6163
sympy_to_mathics[sympy_name] = builtin
6264
if isinstance(builtin, Operator):
63-
builtins_precedence[name] = builtin.precedence
65+
builtins_precedence[Symbol(name)] = builtin.precedence
6466
if isinstance(builtin, PatternObject):
6567
pattern_objects[name] = builtin.__class__
6668
_builtins.update(dict(new_builtins))
@@ -236,8 +238,6 @@ def name_is_builtin_symbol(module, name: str) -> Optional[type]:
236238
mathics_to_sympy = {} # here we have: name -> sympy object
237239
sympy_to_mathics = {}
238240

239-
builtins_precedence = {}
240-
241241
new_builtins = _builtins_list
242242

243243
# FIXME: some magic is going on here..

mathics/eval/makeboxes.py

+14-4
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88

99
import typing
10-
from typing import Any
10+
from typing import Any, Dict, Type
1111

1212
from mathics.core.atoms import Complex, Integer, Rational, Real, String, SymbolI
1313
from mathics.core.convert.expression import to_expression_with_specialization
@@ -42,6 +42,8 @@
4242
SymbolStandardForm,
4343
)
4444

45+
builtins_precedence: Dict[Symbol, int] = {}
46+
4547
element_formatters = {}
4648

4749

@@ -290,9 +292,17 @@ def do_format_expression(
290292
return expr
291293

292294

293-
def parenthesize(precedence, element, element_boxes, when_equal):
294-
from mathics.builtin import builtins_precedence
295+
def parenthesize(
296+
precedence: int, element: Type[BaseElement], element_boxes, when_equal: bool
297+
) -> Type[Expression]:
298+
"""
299+
"Determines if ``element_boxes`` needs to be surrounded with parenthesis.
300+
This is done based on ``precedence`` and the computed preceence of
301+
``element``. The adjusted ListExpression is returned.
295302
303+
If when_equal is True, parentheses will be added if the two
304+
precedence values are equal.
305+
"""
296306
while element.has_form("HoldForm", 1):
297307
element = element.elements[0]
298308

@@ -304,7 +314,7 @@ def parenthesize(precedence, element, element_boxes, when_equal):
304314
elif isinstance(element, (Integer, Real)) and element.value < 0:
305315
element_prec = precedence
306316
else:
307-
element_prec = builtins_precedence.get(element.get_head_name())
317+
element_prec = builtins_precedence.get(element.get_head())
308318
if precedence is not None and element_prec is not None:
309319
if precedence > element_prec or (precedence == element_prec and when_equal):
310320
return Expression(

0 commit comments

Comments
 (0)