Skip to content

Commit 70347a2

Browse files
ZibingZhangZibing Zhang
and
Zibing Zhang
authored
Add built-in fn enum (#130)
Co-authored-by: Zibing Zhang <zizhang@hubspot.com>
1 parent 85dddda commit 70347a2

File tree

2 files changed

+75
-35
lines changed

2 files changed

+75
-35
lines changed

src/latexify/constants.py

+73-33
Original file line numberDiff line numberDiff line change
@@ -2,39 +2,79 @@
22

33
from __future__ import annotations
44

5+
import enum
6+
57
PREFIXES = ["math", "numpy", "np"]
68

7-
BUILTIN_FUNCS: dict[str, tuple[str, str]] = {
8-
"abs": (r"\left|{", r"}\right|"),
9-
"acos": (r"\arccos{\left({", r"}\right)}"),
10-
"acosh": (r"\mathrm{arccosh}{\left({", r"}\right)}"),
11-
"arccos": (r"\arccos{\left({", r"}\right)}"),
12-
"arccosh": (r"\mathrm{arccosh}{\left({", r"}\right)}"),
13-
"arcsin": (r"\arcsin{\left({", r"}\right)}"),
14-
"arcsinh": (r"\mathrm{arcsinh}{\left({", r"}\right)}"),
15-
"arctan": (r"\arctan{\left({", r"}\right)}"),
16-
"arctanh": (r"\mathrm{arctanh}{\left({", r"}\right)}"),
17-
"asin": (r"\arcsin{\left({", r"}\right)}"),
18-
"asinh": (r"\mathrm{arcsinh}{\left({", r"}\right)}"),
19-
"atan": (r"\arctan{\left({", r"}\right)}"),
20-
"atanh": (r"\mathrm{arctanh}{\left({", r"}\right)}"),
21-
"ceil": (r"\left\lceil{", r"}\right\rceil"),
22-
"cos": (r"\cos{\left({", r"}\right)}"),
23-
"cosh": (r"\cosh{\left({", r"}\right)}"),
24-
"exp": (r"\exp{\left({", r"}\right)}"),
25-
"fabs": (r"\left|{", r"}\right|"),
26-
"factorial": (r"\left({", r"}\right)!"),
27-
"floor": (r"\left\lfloor{", r"}\right\rfloor"),
28-
"fsum": (r"\sum\left({", r"}\right)"),
29-
"gamma": (r"\Gamma\left({", r"}\right)"),
30-
"log": (r"\log{\left({", r"}\right)}"),
31-
"log10": (r"\log_{10}{\left({", r"}\right)}"),
32-
"log2": (r"\log_{2}{\left({", r"}\right)}"),
33-
"prod": (r"\prod \left({", r"}\right)"),
34-
"sin": (r"\sin{\left({", r"}\right)}"),
35-
"sinh": (r"\sinh{\left({", r"}\right)}"),
36-
"sqrt": (r"\sqrt{", "}"),
37-
"tan": (r"\tan{\left({", r"}\right)}"),
38-
"tanh": (r"\tanh{\left({", r"}\right)}"),
39-
"sum": (r"\sum \left({", r"}\right)"),
9+
10+
class BuiltinFnName(str, enum.Enum):
11+
"""Built-in function name."""
12+
13+
ABS = "abs"
14+
ACOS = "acos"
15+
ACOSH = "acosh"
16+
ARCCOS = "arccos"
17+
ARCCOSH = "arcosh"
18+
ARCSIN = "arcsin"
19+
ARCSINH = "arcsihn"
20+
ARCTAN = "arctan"
21+
ARCTANH = "arctanh"
22+
ASIN = "asin"
23+
ASINH = "asinh"
24+
ATAN = "atan"
25+
ATANH = "atanh"
26+
CEIL = "ceil"
27+
COS = "cos"
28+
COSH = "cosh"
29+
EXP = "exp"
30+
FABS = "fabs"
31+
FACTORIAL = "factorial"
32+
FLOOR = "floor"
33+
FSUM = "fsum"
34+
GAMMA = "gamma"
35+
LOG = "log"
36+
LOG10 = "log10"
37+
LOG2 = "log2"
38+
PROD = "prod"
39+
SIN = "sin"
40+
SINH = "sinh"
41+
SQRT = "sqrt"
42+
TAN = "tan"
43+
TANH = "tanh"
44+
SUM = "sum"
45+
46+
47+
BUILTIN_FUNCS: dict[BuiltinFnName, tuple[str, str]] = {
48+
BuiltinFnName.ABS: (r"\left|{", r"}\right|"),
49+
BuiltinFnName.ACOS: (r"\arccos{\left({", r"}\right)}"),
50+
BuiltinFnName.ACOSH: (r"\mathrm{arccosh}{\left({", r"}\right)}"),
51+
BuiltinFnName.ARCCOS: (r"\arccos{\left({", r"}\right)}"),
52+
BuiltinFnName.ARCCOSH: (r"\mathrm{arccosh}{\left({", r"}\right)}"),
53+
BuiltinFnName.ARCSIN: (r"\arcsin{\left({", r"}\right)}"),
54+
BuiltinFnName.ARCSINH: (r"\mathrm{arcsinh}{\left({", r"}\right)}"),
55+
BuiltinFnName.ARCTAN: (r"\arctan{\left({", r"}\right)}"),
56+
BuiltinFnName.ARCTANH: (r"\mathrm{arctanh}{\left({", r"}\right)}"),
57+
BuiltinFnName.ASIN: (r"\arcsin{\left({", r"}\right)}"),
58+
BuiltinFnName.ASINH: (r"\mathrm{arcsinh}{\left({", r"}\right)}"),
59+
BuiltinFnName.ATAN: (r"\arctan{\left({", r"}\right)}"),
60+
BuiltinFnName.ATANH: (r"\mathrm{arctanh}{\left({", r"}\right)}"),
61+
BuiltinFnName.CEIL: (r"\left\lceil{", r"}\right\rceil"),
62+
BuiltinFnName.COS: (r"\cos{\left({", r"}\right)}"),
63+
BuiltinFnName.COSH: (r"\cosh{\left({", r"}\right)}"),
64+
BuiltinFnName.EXP: (r"\exp{\left({", r"}\right)}"),
65+
BuiltinFnName.FABS: (r"\left|{", r"}\right|"),
66+
BuiltinFnName.FACTORIAL: (r"\left({", r"}\right)!"),
67+
BuiltinFnName.FLOOR: (r"\left\lfloor{", r"}\right\rfloor"),
68+
BuiltinFnName.FSUM: (r"\sum\left({", r"}\right)"),
69+
BuiltinFnName.GAMMA: (r"\Gamma\left({", r"}\right)"),
70+
BuiltinFnName.LOG: (r"\log{\left({", r"}\right)}"),
71+
BuiltinFnName.LOG10: (r"\log_{10}{\left({", r"}\right)}"),
72+
BuiltinFnName.LOG2: (r"\log_{2}{\left({", r"}\right)}"),
73+
BuiltinFnName.PROD: (r"\prod \left({", r"}\right)"),
74+
BuiltinFnName.SIN: (r"\sin{\left({", r"}\right)}"),
75+
BuiltinFnName.SINH: (r"\sinh{\left({", r"}\right)}"),
76+
BuiltinFnName.SQRT: (r"\sqrt{", "}"),
77+
BuiltinFnName.TAN: (r"\tan{\left({", r"}\right)}"),
78+
BuiltinFnName.TANH: (r"\tanh{\left({", r"}\right)}"),
79+
BuiltinFnName.SUM: (r"\sum \left({", r"}\right)"),
4080
}

src/latexify/transformers/function_expander.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import functools
55
from collections.abc import Callable
66

7-
from latexify import ast_utils
7+
from latexify import ast_utils, constants
88

99

1010
# TODO(ZibingZhang): handle recursive function expansions
@@ -50,7 +50,7 @@ def _hypot_expander(function_expander: FunctionExpander, node: ast.Call) -> ast.
5050

5151
args_reduced = functools.reduce(lambda a, b: ast.BinOp(a, ast.Add(), b), args)
5252
return ast.Call(
53-
func=ast.Name(id="sqrt", ctx=ast.Load()),
53+
func=ast.Name(id=constants.BuiltinFnName.SQRT.value, ctx=ast.Load()),
5454
args=[args_reduced],
5555
)
5656

0 commit comments

Comments
 (0)