
    Ǆg                         d dl mZmZmZmZ d dlmZ d dlmZ	 d dl
mZ d dlmZmZmZ dgZ ed      Z edd	
      Z ed       G d dee                Zy)    )CallableIteratorTupleTypeVar)functional_datapipe)dataframe_wrapper)IterDataPipe)_check_unpickable_fnStreamWrappervalidate_input_colFilterIterDataPipe_T_T_coT)	covariantfilterc                        e Zd ZU dZee   ed<   eed<   	 ddee   deddf fdZde	fdZ
dee   fdZd	edee	ef   fd
Z xZS )r   a3  
    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                 z    t         |           || _        t        |       || _        || _        t        ||       y N)super__init__r   r
   r   	input_colr   )selfr   r   r   	__class__s       q/home/mcse/projects/flask_80/flask-venv/lib/python3.12/site-packages/torch/utils/data/datapipes/iter/selecting.pyr   zFilterIterDataPipe.__init__1   s7     	 Y'""9i0    c                    | j                   | j                        S t        | j                   t        t        f      r-t	        fd| j                   D              } | j                  | S | j                  | j                            S )Nc              3   (   K   | ]	  }|     y wr    ).0coldatas     r   	<genexpr>z6FilterIterDataPipe._apply_filter_fn.<locals>.<genexpr>D   s     =sc=s   )r   r   
isinstancelisttuple)r   r$   argss    ` r   _apply_filter_fnz#FilterIterDataPipe._apply_filter_fn@   sk    >>!>>$''u6=dnn==D!4>>4((>>$t~~"677r   c              #      K   | j                   D ]2  }| j                  |      \  }}|r| t        j                  |       4 y wr   )r   _returnIfTruer   close_streams)r   r$   	conditionfiltereds       r   __iter__zFilterIterDataPipe.__iter__I   sD     MM 	2D"&"4"4T":Ix++D1	2s   AAr$   c                    | j                  |      }t        j                  |      rsg }t        t        j                  |            D ]-  \  }}|s	|j                  t        j                  ||             / t        |      rdt        j                  |      fS yt        |t              st        dt        |            ||fS )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$   r.   resultidxmasks         r   r,   z FilterIterDataPipe._returnIfTrueQ   s    ))$/		*F&z'9'9)'DE B	TMM*"5"5dC"@AB 6{Z..v666")T*WY 
 $r   r   )__name__
__module____qualname____doc__r	   r   __annotations__r   r   r:   r*   r   r0   r   r   r,   __classcell__)r   s   @r   r   r      s}    . 5!! 	1u%1 1
 
18 82(5/ 2" tRx r   N)typingr   r   r   r   %torch.utils.data.datapipes._decoratorr   $torch.utils.data.datapipes.dataframer   r2   #torch.utils.data.datapipes.datapiper	   'torch.utils.data.datapipes.utils.commonr
   r   r   __all__r   r   r   r!   r   r   <module>rL      sg    5 5 E P <   
  T]4( XOe, O Or   