
    sh	                         S SK Jr  S SKJr  S SKJr  S SKJrJr  S/r	\" S5      r
\" S5       " S S\\   5      5       rg	)
    )Sized)TypeVar)functional_datapipe)	DataChunkMapDataPipeBatcherMapDataPipe_Tbatchc                      ^  \ rS rSr% Sr\\S'   \\S'   \\S'   S\	4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rU =r$ )r      ax  
Create mini-batches of data (functional name: ``batch``).

An outer dimension will be added as ``batch_size`` if ``drop_last`` is set to ``True``,
or ``length % batch_size`` for the last batch if ``drop_last`` is set to ``False``.

Args:
    datapipe: Iterable DataPipe being batched
    batch_size: The size of each batch
    drop_last: Option to drop the last batch if it's not full

Example:
    >>> # xdoctest: +SKIP
    >>> from torchdata.datapipes.map import SequenceWrapper
    >>> dp = SequenceWrapper(range(10))
    >>> batch_dp = dp.batch(batch_size=2)
    >>> list(batch_dp)
    [[0, 1], [2, 3], [4, 5], [6, 7], [8, 9]]
datapipe
batch_size	drop_lastFwrapper_classreturnNc                 l   > US:  d   S5       e[         TU ]  5         Xl        X l        X0l        X@l        g )Nr   z+Batch size is required to be larger than 0!)super__init__r   r   r   r   )selfr   r   r   r   	__class__s        {/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/torch/utils/data/datapipes/map/grouping.pyr   BatcherMapDataPipe.__init__)   s7     A~LLL~ $"*    c                 d  ^  / n[        UT R                  -  US-   T R                  -  5      n UR                  U 4S jU 5       5        T R                  U5      $ ! [         aK  nT R
                  (       d%  [        U5      S:  a  T R                  U5      s S nA$ [	        SU S35      UeS nAff = f)N   c              3   B   >#    U  H  nTR                   U   v   M     g 7f)N)r   ).0ir   s     r   	<genexpr>1BatcherMapDataPipe.__getitem__.<locals>.<genexpr>;   s     ;7aq)7s   r   zIndex z is out of bound.)ranger   extendr   
IndexErrorr   len)r   indexr
   indiceses   `    r   __getitem__BatcherMapDataPipe.__getitem__7   s    /%!)t1NO	KLL;7;;%%e,, 	K>>c%j1n))%00 6%0A!BCJ		Ks#   +A 
B/$0B*B/B**B/c                 L   [        U R                  [        5      (       ae  U R                  (       a"  [	        U R                  5      U R
                  -  $ [	        U R                  5      U R
                  -   S-
  U R
                  -  $ [        [        U 5      R                   S35      e)Nr   z# instance doesn't have valid length)	
isinstancer   r   r   r$   r   	TypeErrortype__name__)r   s    r   __len__BatcherMapDataPipe.__len__C   sv    dmmU++~~4==)T__<<DMM*T__<q@T__TTtDz2233VWXXr   )r   r   r   r   )r.   
__module____qualname____firstlineno____doc__r   __annotations__intboolr   r	   r-   r   r(   r/   __static_attributes____classcell__)r   s   @r   r   r      s    ( OO  )2+b/+ + 	+
 I+ 
+ +
KI 
KY Y Yr   N)collections.abcr   typingr   %torch.utils.data.datapipes._decoratorr   #torch.utils.data.datapipes.datapiper   r   __all__r	   r    r   r   <module>r@      sN    !  E F  
  T] W:YY/ :Y :Yr   