@lru_cache(maxsize=TRANSFORM_MAX_CACHE_SIZE)<EOL><INDENT>def _transform(self, node):<DEDENT>
cls = node.__class__<EOL>if cls not in self.transforms:<EOL><INDENT>return node<EOL><DEDENT>transforms = self.transforms[cls]<EOL>for transform_func, predicate in transforms:<EOL><INDENT>if predicate is None or predicate(node):<EOL><INDENT>ret = transform_func(node)<EOL>if ret is not None:<EOL><INDENT>node = ret<EOL><DEDENT>if ret.__class__ != cls:<EOL><INDENT>break<EOL><DEDENT><DEDENT><DEDENT>return node<EOL>
Call matching transforms for the given node if any and return the
        transformed node.