123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- """
- 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
|