o
    }oi                     @   s   d dl Z d dlmZ d dlmZmZ d dlmZ d dlm	Z	m
Z
 d dlmZ d dlmZ G dd	 d	eZd
d Zdd Zdd ZdS )    N)WebDatasetCommon)PickleTransformbuild_resolution_filter)ImagePyramidNoCorruptions)construct_image_augmentationsidentical_transform)Dataset)loggingc                       s0   e Zd Z	d	 fdd	Zdd Zdd Z  ZS )
ImagenSyntheticDataset順 Fc                    sL   t    || _|| _|| _|s$|jr|jn|j| _|j| _|j| _d S d S N)	super__init__fake_lenresno_embeddingout_keyprecached_keytoken_length	embed_dim)selfr   conditioning_cfgr   r   	__class__ j/home/ubuntu/.local/lib/python3.10/site-packages/nemo/collections/multimodal/data/imagen/imagen_dataset.pyr      s   
zImagenSyntheticDataset.__init__c                 C   s   i }t | jtr| jD ]}d| }td||||< qntd| j| j|d< d| |d< | jsOt| j| j|| j d< tj	| jtj
d|| j d< |S )	Nimages_   imagesz
fake text raw_text_embeddings)dtype_mask)
isinstancer   listtorchrandnr   r   r   r   oneslong)r   indexitem
resolution	image_keyr   r   r   __getitem__+   s   

z"ImagenSyntheticDataset.__getitem__c                 C   s   | j S r   )r   )r   r   r   r   __len__:   s   zImagenSyntheticDataset.__len__)r   F)__name__
__module____qualname__r   r-   r.   __classcell__r   r   r   r   r
      s
    r
   c                    s   dd } fdd}||fS )Nc                 s   sB    | D ]}t  }|d |d< ||d  |d |d< |V  qd S )Nr   r         r   )dictupdateinpinputout_dictr   r   r   tuple_to_dict?   s   z4_build_functions_with_pickles.<locals>.tuple_to_dictc                    sd   | d | d | d }}}t jddd}t jg jg jgd}t}||||||fS )NjpgpickletxtaugmentationsT	normalize)encoding_keysencoding_lengthsout_keys)r   traingetr   r   r   r   r   )sampleimage	encodingstextimg_transformpickle_transformtext_transformcondition_cfgdata_cfgr   r   transform_fnJ   s   z3_build_functions_with_pickles.<locals>.transform_fnr   )rP   rO   r;   rQ   r   rN   r   _build_functions_with_pickles>   s   rR   c                    s   dd } fdd}||fS )Nc                 s   s4    | D ]}t  }|d |d< |d |d< |V  qd S )Nr   r   r3   r   )r5   r7   r   r   r   r;   Y   s   z2_build_functions_no_pickles.<locals>.tuple_to_dictc                    s:   | d | d }}t  jddd}t}||||fS )Nr<   r>   r?   Tr@   )r   rE   rF   r   )rG   rH   rJ   rK   rM   rP   r   r   rQ   `   s   z1_build_functions_no_pickles.<locals>.transform_fnr   )rP   r;   rQ   r   rS   r   _build_functions_no_picklesX   s   rT   c           
   
      s*  | j }| j}|ddr*td t|jdd||dd|ddd	}|d fS |ddr7t|\}}nt||\}}|jd
d }| j	
drg|jdsUJ dtd|jj  t|jjd nd   fdd}|g}	 ry|	| t||||	|rtdi |jddind dd}|d fS )Nsynthetic_dataFzCreating Synthetic Datasaet.target_resolutions@   synthetic_data_lengthi'  online_encoding)r   r   r   r   
filteringssrz2SR model requires multiple resolution for trainingz3Resizing input images into the follow resolutions: )rV   c                 3   s.    | D ]}  |d }|| |V  qd S )Nr   )obtain_image_pyramidr6   )r8   	data_dictdata_pyramidcorruption_genr   r   r\      s   
z8build_train_valid_datasets.<locals>.obtain_image_pyramid	image_idxr<   T)dataset_cfgconsumed_samplesmap_fn
compose_fn	filter_fnis_trainr   )dataconditioningrF   r	   infor
   rE   rT   rR   	unet_type
startswithrV   r   appendr   r   r+   )
	model_cfgrc   rP   rO   
train_datar;   rQ   
filter_cfgr\   re   r   r_   r   build_train_valid_datasetsi   sB   



rq   )r%   2nemo.collections.multimodal.data.common.webdatasetr   Cnemo.collections.multimodal.data.imagen.augmentations.augmentationsr   r   @nemo.collections.multimodal.data.imagen.augmentations.corruptionr   Lnemo.collections.multimodal.data.stable_diffusion.augmentation.augmentationsr   r   nemo.core.classesr   NeMoDataset
nemo.utilsr	   r
   rR   rT   rq   r   r   r   r   <module>   s    