Spaces:
Running
Running
""" | |
Replacement rules. | |
""" | |
class Transform: | |
""" | |
Immutable mapping that can be used as a generic transformation rule. | |
Parameters | |
========== | |
transform : callable | |
Computes the value corresponding to any key. | |
filter : callable, optional | |
If supplied, specifies which objects are in the mapping. | |
Examples | |
======== | |
>>> from sympy.core.rules import Transform | |
>>> from sympy.abc import x | |
This Transform will return, as a value, one more than the key: | |
>>> add1 = Transform(lambda x: x + 1) | |
>>> add1[1] | |
2 | |
>>> add1[x] | |
x + 1 | |
By default, all values are considered to be in the dictionary. If a filter | |
is supplied, only the objects for which it returns True are considered as | |
being in the dictionary: | |
>>> add1_odd = Transform(lambda x: x + 1, lambda x: x%2 == 1) | |
>>> 2 in add1_odd | |
False | |
>>> add1_odd.get(2, 0) | |
0 | |
>>> 3 in add1_odd | |
True | |
>>> add1_odd[3] | |
4 | |
>>> add1_odd.get(3, 0) | |
4 | |
""" | |
def __init__(self, transform, filter=lambda x: True): | |
self._transform = transform | |
self._filter = filter | |
def __contains__(self, item): | |
return self._filter(item) | |
def __getitem__(self, key): | |
if self._filter(key): | |
return self._transform(key) | |
else: | |
raise KeyError(key) | |
def get(self, item, default=None): | |
if item in self: | |
return self[item] | |
else: | |
return default | |