o
    *j                     @   sR   d dl mZ d dlZd dlZdd Z						dddZd	eej fd
dZdS )    )ListNc                    s$  t dkri S  fdd}t i d}d dddur)|d|d d< d d	ddur?td
d D |d	< d dddure|d|d< tfddD }|  }||d< d dddurw|d|d d< d dddurtjdd D dd|d d< d dddurt	dd D |d d< d dddurt	dd D |d d< d dddurt	dd D |d< d dddurtj	dd D dd|d< d d ddurtd!d D |d < d d"ddurtd#d D 
 |d$< d d%ddur0|d%|d&< d d'ddurGtd(d D |d)< d d*ddurX|d*|d+< d d,ddurqtjd-d D dd|d.< d d/ddurtjd0d D dd|d1< d d2ddurtjd3d D dd|d4< d d5ddurd6d D |d7< d d8ddurtd9d D |d d8< tjd:d D tjd;|d d<< d d=ddurt	d>d D |d d?< d d@ddur|d@|d dA< t	dBd D |d dC< d dDddur:|dD|dD< tjdEd D tjd;|dF< d dGddurPdHd D }||dG< d dIddurfdJd D }||dI< d dKddur{|dK}	|	|d dK< d dLddur|dL}
|
|d dL< |S )Mz-
    convert the sample to batch tensor.
    r   c                    s   t  fddD dS )Nc                    s   g | ]}|  qS  r   .0skeyr   k/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/preprocessors/ofa/utils/collate.py
<listcomp>       z-collate_fn.<locals>.merge.<locals>.<listcomp>)eos_idx)collate_tokensr   r   pad_idxsamplesr   r	   merge   s   zcollate_fn.<locals>.merge)Z
nsentences	net_inputsourceNr   Z	input_idsidc                 S   s   g | ]}| d qS )r   )getr   r   r   r	   r
      s    zcollate_fn.<locals>.<listcomp>targetc                    s"   g | ]}|d      qS )r   )nelongsumr   )r   r   r	   r
       s   " ntokensZprev_output_tokensZdecoder_input_idspatch_imagec                 S      g | ]}|d  qS )r   r   r   sampler   r   r	   r
   '   r   )dimZpatch_images
patch_maskc                 S   r   )r    r   r   r   r   r	   r
   *   r   Zpatch_masks	code_maskc                 S   r   )r!   r   r   r   r   r	   r
   .   r   Z
code_masks
code_imagec                 S   r   )r"   r   r   r   r   r	   r
   1   r   Zcode_imagesconfc                 S   r   )r#   r   r   r   r   r	   r
   4   r   ref_dictc                 S   r   )r$   r   r   r   r   r	   r
   6   r   labelc                 S   r   )r%   r   r   r   r   r	   r
   8   r   labelsZconstraint_maskZconstraint_masksdecoder_promptc                 S   s   g | ]}|d    qS )r'   )tolistr   r   r   r	   r
   =   s    Zdecoder_promptsZprefix_tokenZprefix_tokensw_resize_ratioc                 S   r   )r)   r   r   r   r   r	   r
   C   r   Zw_resize_ratiosh_resize_ratioc                 S   r   )r*   r   r   r   r   r	   r
   F   r   Zh_resize_ratiosregion_coordc                 S   r   )r+   r   r   r   r   r	   r
   I   r   Zregion_coordsr   c                 S   r   )r   r   r   r   r   r	   r
   K   r   r   fbankc                 S   r   )r,   r   r   r   r   r	   r
   O   r   c                 S      g | ]	}|d   dqS )r,   r   sizer   r   r   r	   r
   Q       )ZdtypeZfbank_length
fbank_maskc                 S   r   )r1   r   r   r   r   r	   r
   T   r   Zfbank_masksZ
phone_itemZphone_itemsc                 S   r   )Z
phone_maskr   r   r   r   r	   r
   X   r   Zphone_masksphone_targetc                 S   r-   )r2   r   r.   r   r   r   r	   r
   \   r0   Zphone_length	db_structc                 S   r   )r3   r   r   r   r   r	   r
   `   r   
mask_ratioc                 S   r   )r4   r   r   r   r   r	   r
   c   r   seg_col_tokensseg_row_tokens)lenr   nparraytorchZ
LongTensorr   itemstackcatr(   _collate_framesZtensorr   )r   r   r   r   batchZtgt_lengthsr   r3   r4   r5   r6   r   r   r	   
collate_fn	   s   



r@   F   c                    s"  t dd | D }|du r|nt ||}|dkr*|| dkr*t|d | d | } fdd}	| d  dkrG| d t| ||}
n$| d  d	krid
u sUJ | d t| || d d|}
ntt| D ]\}}|	||r|
| |t| d n	|
| dt|  qo|
S )z5Convert a list of 1d tensors into a padded 2d tensor.c                 s       | ]}| d V  qdS r   Nr.   )r   vr   r   r	   	<genexpr>z       z!collate_tokens.<locals>.<genexpr>NrA   r   g?c                    s\   |  |   ks
J r' d u r| d |d< n |d< | d d |dd < d S ||  d S )Nr   rA   )ZnumelZcopy_)srcdstr   move_eos_to_beginningr   r	   copy_tensor   s   z#collate_tokens.<locals>.copy_tensor   F)	maxintr   newr7   Zfill_r/   NotImplementedError	enumerate)valuesr   r   Zleft_padrK   Zpad_to_lengthZpad_to_multipleZ
pad_to_bszr/   rL   resirD   r   rJ   r	   r   o   s$   8r   framesc                 C   s`   t dd | D }| d t| || d df}t| D ]\}}|||d|df< q|S )a;  
    Convert a list of 2D frames into a padded 3D tensor
    Args:
        frames (list): list of 2D frames of size L[i]*f_dim. Where L[i] is
            length of i-th frame and f_dim is static dimension of features
    Returns:
        3D tensor of size len(frames)*len_max*f_dim where len_max is max of L[i]
    c                 s   rB   rC   r.   )r   framer   r   r	   rE      rF   z"_collate_frames.<locals>.<genexpr>r   rA   N)rN   Z	new_zerosr7   r/   rR   )rV   max_lenoutrU   rD   r   r   r	   r>      s
   	"r>   )NFFNrA   N)	typingr   numpyr8   r:   r@   r   ZTensorr>   r   r   r   r	   <module>   s   i
*