Skip to content

Commit 0a2ee9f

Browse files
committed
Introduce Integer1 = Integer(1)
@mmatera: a while back in branch not pushed, I also had other numbers and in particular Integer(0) which is even more common. I had problems somewhere along the line with that, so I didn't commit any of this. Since you introduced more locally IntegerOne, put this in for that one case. However rather than do more Integer symbols in this branch, let's merge it in and do this as a follow on. The number of changes in this branch is getting quite long.
1 parent a8317b9 commit 0a2ee9f

5 files changed

Lines changed: 28 additions & 24 deletions

File tree

mathics/builtin/algebra.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
Atom,
1111
Expression,
1212
Integer,
13+
Integer1,
1314
Number,
1415
Symbol,
1516
SymbolFalse,
@@ -497,17 +498,17 @@ class FactorTermsList(Builtin):
497498
def apply_list(self, expr, vars, evaluation):
498499
"FactorTermsList[expr_, vars_List]"
499500
if expr == Integer(0):
500-
return Expression("List", Integer(1), Integer(0))
501+
return Expression("List", Integer1, Integer(0))
501502
elif isinstance(expr, Number):
502-
return Expression("List", expr, Integer(1))
503+
return Expression("List", expr, Integer1)
503504

504505
for x in vars.leaves:
505506
if not (isinstance(x, Atom)):
506507
return evaluation.message("CoefficientList", "ivar", x)
507508

508509
sympy_expr = expr.to_sympy()
509510
if sympy_expr is None:
510-
return Expression("List", Integer(1), expr)
511+
return Expression("List", Integer1, expr)
511512
sympy_expr = sympy.together(sympy_expr)
512513

513514
sympy_vars = [
@@ -1160,7 +1161,7 @@ def apply_noform(self, expr, evaluation):
11601161

11611162
def apply(self, expr, form, evaluation):
11621163
"Coefficient[expr_, form_]"
1163-
return _coefficient(self.__class__.__name__, expr, form, Integer(1), evaluation)
1164+
return _coefficient(self.__class__.__name__, expr, form, Integer1, evaluation)
11641165

11651166
def apply_n(self, expr, form, n, evaluation):
11661167
"Coefficient[expr_, form_, n_]"
@@ -1401,7 +1402,7 @@ class Exponent(Builtin):
14011402

14021403
def apply_novar(self, expr, evaluation):
14031404
"Exponent[expr_]"
1404-
return evaluation.message("Exponent", "argtu", Integer(1))
1405+
return evaluation.message("Exponent", "argtu", Integer1)
14051406

14061407
def apply(self, expr, form, h, evaluation):
14071408
"Exponent[expr_, form_, h_]"

mathics/builtin/arithmetic.py

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
Complex,
2727
Expression,
2828
Integer,
29+
Integer1,
2930
Number,
3031
Rational,
3132
Real,
@@ -113,7 +114,7 @@ def apply(self, z, evaluation):
113114
if mpmath.isinf(result) and isinstance(result, mpmath.mpc):
114115
result = Symbol("ComplexInfinity")
115116
elif mpmath.isinf(result) and result > 0:
116-
result = Expression("DirectedInfinity", Integer(1))
117+
result = Expression("DirectedInfinity", Integer1)
117118
elif mpmath.isinf(result) and result < 0:
118119
result = Expression("DirectedInfinity", Integer(-1))
119120
elif mpmath.isnan(result):
@@ -261,7 +262,7 @@ def negate(item):
261262
if item.has_form("Times", 1, None):
262263
if isinstance(item.leaves[0], Number):
263264
neg = -item.leaves[0]
264-
if neg.sameQ(Integer(1)):
265+
if neg.sameQ(Integer1):
265266
if len(item.leaves) == 1:
266267
return neg
267268
else:
@@ -584,7 +585,7 @@ def inverse(item):
584585
item.leaves[1], (Integer, Rational, Real)
585586
):
586587
neg = -item.leaves[1]
587-
if neg.sameQ(Integer(1)):
588+
if neg.sameQ(Integer1):
588589
return item.leaves[0]
589590
else:
590591
return Expression("Power", item.leaves[0], neg)
@@ -604,7 +605,7 @@ def inverse(item):
604605
negative.append(inverse(item))
605606
elif isinstance(item, Rational):
606607
numerator = item.numerator()
607-
if not numerator.sameQ(Integer(1)):
608+
if not numerator.sameQ(Integer1):
608609
positive.append(numerator)
609610
negative.append(item.denominator())
610611
else:
@@ -619,7 +620,7 @@ def inverse(item):
619620
if positive:
620621
positive = create_infix(positive, op, 400, "None")
621622
else:
622-
positive = Integer(1)
623+
positive = Integer1
623624
if negative:
624625
negative = create_infix(negative, op, 400, "None")
625626
result = Expression(
@@ -681,15 +682,15 @@ def apply(self, items, evaluation):
681682
and item.leaves[0].sameQ(leaves[-1])
682683
):
683684
leaves[-1] = Expression(
684-
"Power", leaves[-1], Expression("Plus", item.leaves[1], Integer(1))
685+
"Power", leaves[-1], Expression("Plus", item.leaves[1], Integer1)
685686
)
686687
elif (
687688
leaves
688689
and leaves[-1].has_form("Power", 2)
689690
and leaves[-1].leaves[0].sameQ(item)
690691
):
691692
leaves[-1] = Expression(
692-
"Power", item, Expression("Plus", Integer(1), leaves[-1].leaves[1])
693+
"Power", item, Expression("Plus", Integer1, leaves[-1].leaves[1])
693694
)
694695
elif item.get_head().sameQ(SymbolDirectedInfinity):
695696
infinity_factor = True
@@ -719,9 +720,9 @@ def apply(self, items, evaluation):
719720
number = sympy.Mul(*[item.to_sympy() for item in numbers])
720721
number = from_sympy(number)
721722
else:
722-
number = Integer(1)
723+
number = Integer1
723724

724-
if number.sameQ(Integer(1)):
725+
if number.sameQ(Integer1):
725726
number = None
726727
elif number.is_zero:
727728
if infinity_factor:
@@ -743,7 +744,7 @@ def apply(self, items, evaluation):
743744
if not leaves:
744745
if infinity_factor:
745746
return SymbolComplexInfinity
746-
return Integer(1)
747+
return Integer1
747748

748749
if len(leaves) == 1:
749750
ret = leaves[0]
@@ -1354,7 +1355,7 @@ class I(Predefined):
13541355
python_equivalent = 1j
13551356

13561357
def evaluate(self, evaluation):
1357-
return Complex(Integer(0), Integer(1))
1358+
return Complex(Integer(0), Integer1)
13581359

13591360

13601361
class NumberQ(Test):
@@ -2208,7 +2209,7 @@ def apply(self, expr, evaluation):
22082209
"%(name)s[expr_]"
22092210
if isinstance(expr, Symbol):
22102211
if expr == SymbolTrue:
2211-
return Integer(1)
2212+
return Integer1
22122213
elif expr == SymbolFalse:
22132214
return Integer(0)
22142215
return None
@@ -2219,7 +2220,7 @@ class Assumptions(Predefined):
22192220
<dl>
22202221
<dt>'$Assumptions'
22212222
<dd>is the default setting for the Assumptions option used in such
2222-
functions as Simplify, Refine, and Integrate.
2223+
functions as Simplify, Refine, and Integrate.
22232224
</dl>
22242225
"""
22252226

mathics/builtin/calculus.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from mathics.core.expression import (
1010
Expression,
1111
Integer,
12+
Integer1,
1213
Number,
1314
SymbolTrue,
1415
SymbolFalse,
@@ -148,10 +149,10 @@ def apply(self, f, x, evaluation):
148149
"D[f_, x_?NotListQ]"
149150

150151
if f == x:
151-
return Integer(1)
152+
return Integer1
152153
elif not f.is_atom() and len(f.leaves) == 1 and f.leaves[0] == x:
153154
return Expression(
154-
Expression(Expression("Derivative", Integer(1)), f.head), x
155+
Expression(Expression("Derivative", Integer1), f.head), x
155156
)
156157
elif not f.is_atom() and len(f.leaves) == 1:
157158
g = f.leaves[0]
@@ -170,7 +171,7 @@ def summand(leaf, index):
170171
"Derivative",
171172
*(
172173
[Integer(0)] * (index)
173-
+ [Integer(1)]
174+
+ [Integer1]
174175
+ [Integer(0)] * (len(f.leaves) - index - 1)
175176
)
176177
),

mathics/builtin/comparison.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
Complex,
2121
Expression,
2222
Integer,
23+
Integer1,
2324
Number,
2425
Symbol,
2526
SymbolFalse,
@@ -243,7 +244,6 @@ def expr_equal(self, lhs, rhs, max_extra_prec=None) -> Optional[bool]:
243244
return True
244245

245246
def infty_equal(self, lhs, rhs, max_extra_prec=None) -> Optional[bool]:
246-
IntegerOne = Integer(1)
247247
if rhs.get_head().sameQ(SymbolDirectedInfinity):
248248
lhs, rhs = rhs, lhs
249249
if not lhs.get_head().sameQ(SymbolDirectedInfinity):
@@ -253,14 +253,14 @@ def infty_equal(self, lhs, rhs, max_extra_prec=None) -> Optional[bool]:
253253
return True
254254
else:
255255
return self.equal2(
256-
Expression("Sign", lhs._leaves[0]), IntegerOne, max_extra_prec
256+
Expression("Sign", lhs._leaves[0]), Integer1, max_extra_prec
257257
)
258258
if rhs.is_numeric():
259259
return False
260260
elif rhs.is_atom():
261261
return None
262262
if rhs.get_head().sameQ(lhs.get_head()):
263-
dir1 = dir2 = IntegerOne
263+
dir1 = dir2 = Integer1
264264
if len(lhs._leaves) == 1:
265265
dir1 = lhs._leaves[0]
266266
if len(rhs._leaves) == 1:

mathics/core/expression.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2265,6 +2265,7 @@ def __neg__(self) -> "Integer":
22652265
def is_zero(self) -> bool:
22662266
return self.value == 0
22672267

2268+
Integer1 = Integer(1)
22682269

22692270
class Rational(Number):
22702271
@lru_cache()

0 commit comments

Comments
 (0)