o
    }o™iû  ã                   @   s    d dl mZ G dd„ deƒZdS )é    )ÚNerfModelBasec                       sZ   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zddd„Zddd„Zddd„Z	dd„ Z
‡  ZS )ÚTxt2NerfBasec                    sŽ   t ƒ  |¡ |j| _|j| _|j| _|j| _|j| _|j| _|j	| _
|j| _|  |j¡}|  |j¡}|  |j¡}|  |j	|||¡| _	d | _d S ©N)ÚsuperÚ__init__ÚpromptÚnegative_promptÚfront_promptÚside_promptÚback_promptÚnerfÚnerf_cfgÚrendererÚrenderer_cfgÚguidanceÚguidance_cfgÚfrom_config_dictÚmaterialÚ
backgroundÚbuild_renderer)ÚselfÚcfgr   r   r   ©Ú	__class__© úi/home/ubuntu/.local/lib/python3.10/site-packages/nemo/collections/multimodal/models/nerf/txt2nerf_base.pyr      s   
zTxt2NerfBase.__init__c                 C   s    |   |¡}||_||_||_|S r   )r   r   r   r   )r   r   r   r   r   r   r   r   r   r   %   s
   
zTxt2NerfBase.build_rendererc                 C   s0   |   |¡| _| j ¡  | j ¡ D ]}d|_qd S )NF)r   r   ÚevalÚ
parametersÚrequires_grad)r   r   Úpr   r   r   Úbuild_guidance,   s
   
ÿzTxt2NerfBase.build_guidancec                 C   sp   | j  | jg¡| j  | jg¡| j  | j› | j› g¡| j  | j› | j› g¡| j  | j› | j› g¡dœ| _d S )N)ÚdefaultÚuncondÚfrontÚsideÚback)r   Úget_text_embedsr   r   r	   r
   r   Útext_z©r   r   r   r   Úprepare_embeddings2   s   ûzTxt2NerfBase.prepare_embeddingsÚreturnNc                 C   s   |   | j¡ |  ¡  d S r   )r    r   r)   r(   r   r   r   Úon_fit_start<   s   zTxt2NerfBase.on_fit_startr   c                 C   sÚ   |   | j¡r| jj| j| jd |   | jj¡r"| jjj| j| jd |   | jj¡r4| jjj| j| jd |   | jj¡rF| jjj| j| jd |   | j¡rV| jj| j| jd | j	j
j}|   |¡rk|j| j| jd d S d S )N)ÚepochÚglobal_step)Úis_module_updatabler   Úupdate_stepÚcurrent_epochr-   r   r   r   r   ÚtrainerÚtrain_dataloaderÚdataset)r   ÚbatchÚ	batch_idxÚunusedr3   r   r   r   Úon_train_batch_start@   s   

ÿz!Txt2NerfBase.on_train_batch_starté€   c                 C   s   | j j|||dS )N)Ú
resolutionÚ
batch_sizeÚdensity_thresh)r   Úmesh)r   r9   r:   r;   r   r   r   r<   T   s   zTxt2NerfBase.meshc                 C   s.   dd„ |d   ¡ D ƒ}|D ]}|d |= qd S )Nc                 S   s   g | ]	}|  d ¡r|‘qS )z	guidance.)Ú
startswith)Ú.0Úkeyr   r   r   Ú
<listcomp>[   s    z3Txt2NerfBase.on_save_checkpoint.<locals>.<listcomp>Ú
state_dict)Úkeys)r   Ú
checkpointÚkeys_to_remover?   r   r   r   Úon_save_checkpointW   s   ÿzTxt2NerfBase.on_save_checkpoint)r*   N)r   )r8   N)Ú__name__Ú
__module__Ú__qualname__r   r   r    r)   r+   r7   r<   rE   Ú__classcell__r   r   r   r   r      s    



r   N)Ú,nemo.collections.multimodal.models.nerf.baser   r   r   r   r   r   Ú<module>   s   