8
8
9
9
from ibis .common .bases import Hashable
10
10
from ibis .common .collections import frozendict
11
- from ibis .common .patterns import NoMatch , Pattern , pattern
11
+ from ibis .common .patterns import NoMatch , pattern
12
12
from ibis .util import experimental
13
13
14
14
if TYPE_CHECKING :
@@ -485,9 +485,7 @@ def toposort(node: Node) -> Graph:
485
485
486
486
487
487
def traverse (
488
- fn : Callable [[Node ], tuple [bool | Iterable , Any ]],
489
- node : Iterable [Node ] | Node ,
490
- filter : Optional [Any ] = None ,
488
+ fn : Callable [[Node ], tuple [bool | Iterable , Any ]], node : Iterable [Node ] | Node
491
489
) -> Iterator [Any ]:
492
490
"""Utility for generic expression tree traversal.
493
491
@@ -498,24 +496,17 @@ def traverse(
498
496
the traversal, and the second is the result if its not `None`.
499
497
node
500
498
The Node expression or a list of expressions.
501
- filter
502
- Pattern-like object to filter out nodes from the traversal. The traversal will
503
- only visit nodes that match the given pattern and stop otherwise.
504
499
"""
505
500
506
501
args = reversed (node ) if isinstance (node , Sequence ) else [node ]
507
502
todo : deque [Node ] = deque (args )
508
503
seen : set [Node ] = set ()
509
- filter : Pattern = pattern (filter or ...)
510
504
511
505
while todo :
512
506
node = todo .pop ()
513
507
514
508
if node in seen :
515
509
continue
516
- if filter .match (node , {}) is NoMatch :
517
- continue
518
-
519
510
seen .add (node )
520
511
521
512
control , result = fn (node )
0 commit comments