Skip to content

Commit 0d4ce19

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 11a7eec commit 0d4ce19

File tree

2 files changed

+14
-6
lines changed

2 files changed

+14
-6
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))
@@ -237,8 +239,6 @@ def name_is_builtin_symbol(module, name: str) -> Optional[type]:
237239
mathics_to_sympy = {} # here we have: name -> sympy object
238240
sympy_to_mathics = {}
239241

240-
builtins_precedence = {}
241-
242242
new_builtins = _builtins_list
243243

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

mathics/eval/makeboxes.py

+11-3
Original file line numberDiff line numberDiff line change
@@ -295,9 +295,17 @@ def do_format_expression(
295295
return expr
296296

297297

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

@@ -309,7 +317,7 @@ def parenthesize(precedence, element, element_boxes, when_equal):
309317
elif isinstance(element, (Integer, Real)) and element.value < 0:
310318
element_prec = precedence
311319
else:
312-
element_prec = builtins_precedence.get(element.get_head_name())
320+
element_prec = builtins_precedence.get(element.get_head())
313321
if precedence is not None and element_prec is not None:
314322
if precedence > element_prec or (precedence == element_prec and when_equal):
315323
return Expression(

0 commit comments

Comments
 (0)