
    sh                         S SK Jr  S SKJrJr  S SKJr  S SKJr	  S SK
Jr  S SKJrJrJr  S/r\" S5      r\" S	S
S9r\" S5       " S S\\   5      5       rg)    )Iterator)CallableTypeVar)functional_datapipe)dataframe_wrapper)IterDataPipe)_check_unpickable_fnStreamWrappervalidate_input_colFilterIterDataPipe_T_T_coT)	covariantfilterc                      ^  \ rS rSr% Sr\\   \S'   \\S'    SS\\   S\SS4U 4S jjjr	S\
4S jrS\\   4S	 jrS
\S\\
\4   4S jrSrU =r$ )r      a  
Filters out elements from the source datapipe according to input ``filter_fn`` (functional name: ``filter``).

Args:
    datapipe: Iterable DataPipe being filtered
    filter_fn: Customized function mapping an element to a boolean.
    input_col: Index or indices of data which ``filter_fn`` is applied, such as:

        - ``None`` as default to apply ``filter_fn`` to the data directly.
        - Integer(s) is used for list/tuple.
        - Key(s) is used for dict.

Example:
    >>> # xdoctest: +SKIP
    >>> from torchdata.datapipes.iter import IterableWrapper
    >>> def is_even(n):
    ...     return n % 2 == 0
    >>> dp = IterableWrapper(range(5))
    >>> filter_dp = dp.filter(filter_fn=is_even)
    >>> list(filter_dp)
    [0, 2, 4]
datapipe	filter_fnNreturnc                 r   > [         TU ]  5         Xl        [        U5        X l        X0l        [        X#5        g N)super__init__r   r	   r   	input_colr   )selfr   r   r   	__class__s       }/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/torch/utils/data/datapipes/iter/selecting.pyr   FilterIterDataPipe.__init__2   s/     	 Y'""90    c                 "  ^ U R                   c  U R                  T5      $ [        U R                   [        [        45      (       a.  [	        U4S jU R                    5       5      nU R                  " U6 $ U R                  TU R                      5      $ )Nc              3   .   >#    U  H
  nTU   v   M     g 7fr    ).0coldatas     r   	<genexpr>6FilterIterDataPipe._apply_filter_fn.<locals>.<genexpr>E   s     =nscns   )r   r   
isinstancelisttuple)r   r%   argss    ` r   _apply_filter_fn#FilterIterDataPipe._apply_filter_fnA   sl    >>!>>$''u66=dnn==D>>4((>>$t~~"677r   c              #      #    U R                    H9  nU R                  U5      u  p#U(       a  Uv   M#  [        R                  " U5        M;     g 7fr   )r   _returnIfTruer
   close_streams)r   r%   	conditionfiltereds       r   __iter__FilterIterDataPipe.__iter__J   s<     MMD"&"4"4T":I++D1 "s   AAr%   c                    U R                  U5      n[        R                  " U5      (       a  / n[        [        R                  " U5      5       H3  u  pEU(       d  M  UR                  [        R                  " X5      5        M5     [        U5      (       a  S[        R                  " U5      4$ g[        U[        5      (       d  [        S[        U5      5      eX!4$ )NT)FNzEBoolean output is required for `filter_fn` of FilterIterDataPipe, got)r,   
df_wrapper	is_column	enumerateiterateappendget_itemlenconcatr(   bool
ValueErrortype)r   r%   r1   resultidxmasks         r   r/    FilterIterDataPipe._returnIfTrueR   s    ))$/		**F&z'9'9)'DE	4MM*"5"5d"@A F 6{{Z..v666")T**WY 
 r   )r   r   r   r   )__name__
__module____qualname____firstlineno____doc__r   r   __annotations__r   r   r>   r,   r   r3   r   r*   r/   __static_attributes____classcell__)r   s   @r   r   r      s    . 5!! 	1u%1 1
 
1 18 82(5/ 2" tRx  r   N)collections.abcr   typingr   r   %torch.utils.data.datapipes._decoratorr   $torch.utils.data.datapipes.dataframer   r6   #torch.utils.data.datapipes.datapiper   'torch.utils.data.datapipes.utils.commonr	   r
   r   __all__r   r   r   r"   r   r   <module>rT      sg    $ $ E P <   
  T]4( XOe, O Or   