Skip to content

Commit

Permalink
completes incomplete BaseExpression.is_free() change
Browse files Browse the repository at this point in the history
  • Loading branch information
poke1024 committed Oct 9, 2016
1 parent 9cdde2e commit 08ff70e
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 23 deletions.
10 changes: 5 additions & 5 deletions mathics/builtin/patterns.py
Original file line number Diff line number Diff line change
Expand Up @@ -1340,19 +1340,19 @@ class _StopGeneratorBaseExpressionIsFree(StopGenerator):
pass


def is_free(expr, form, evaluation):
def item_is_free(item, form, evaluation):
# for vars, rest in form.match(self, {}, evaluation, fully=False):
def yield_match(vars, rest):
raise _StopGeneratorBaseExpressionIsFree(False)
# return False

try:
form.match(yield_match, expr, {}, evaluation, fully=False)
form.match(yield_match, item, {}, evaluation, fully=False)
except _StopGeneratorBaseExpressionIsFree as exc:
return exc.value

if expr.is_atom():
if item.is_atom():
return True
else:
return expr.head.is_free(form, evaluation) and all(
leaf.is_free(form, evaluation) for leaf in expr.leaves)
return item_is_free(item.head, form, evaluation) and all(
item_is_free(leaf, form, evaluation) for leaf in item.leaves)
20 changes: 2 additions & 18 deletions mathics/core/expression.py
Original file line number Diff line number Diff line change
Expand Up @@ -312,24 +312,8 @@ def format(self, evaluation, form):
return result

def is_free(self, form, evaluation):
from mathics.core.pattern import StopGenerator

class StopGenerator_BaseExpression_is_free(StopGenerator):
pass

# for vars, rest in form.match(self, {}, evaluation, fully=False):
def yield_match(vars, rest):
raise StopGenerator_BaseExpression_is_free(False)
# return False
try:
form.match(yield_match, self, {}, evaluation, fully=False)
except StopGenerator_BaseExpression_is_free as exc:
return exc.value
if self.is_atom():
return True
else:
return self.head.is_free(form, evaluation) and all(
leaf.is_free(form, evaluation) for leaf in self.leaves)
from mathics.builtin.patterns import item_is_free
return item_is_free(self, form, evaluation)

def is_inexact(self):
return self.get_precision() is not None
Expand Down

0 comments on commit 08ff70e

Please sign in to comment.