<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def findall(node, filter_=None, stop=None, maxlevel=None, mincount=None, maxcount=None):
 """ Search nodes matching `filter_` but stop at `maxlevel` or `stop`. Return tuple with matching nodes. Args: node: top node, start searching. Keyword Args: filter_: function called with every `node` as argument, `node` is returned if `True`. stop: stop iteration at `node` if `stop` function returns `True` for `node`. maxlevel (int):
 maximum decending in the node hierarchy. mincount (int):
 minimum number of nodes. maxcount (int):
 maximum number of nodes. Example tree: f |-- b | |-- a | +-- d | |-- c | +-- e +-- g +-- i +-- h (Node('/f/b'), Node('/f/b/a')) (Node('/f/b/d'), Node('/f/b/d/c'), Node('/f/b/d/e')) The number of matches can be limited: Traceback (most recent call last):
 Traceback (most recent call last):
 """

    return _findall(node, filter_=filter_, stop=stop,
                    maxlevel=maxlevel, mincount=mincount, maxcount=maxcount)