o
    iR                     @   sX   d Z ddlZddlZddlmZ ddlmZ ddlmZ G dd dZG d	d
 d
ZdS )a  
    This file is part of ComfyUI.
    Copyright (C) 2024 Comfy

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
    N   )
model_base)utils)latent_formatsc                   @   s   e Zd Zdd ZdS )
ClipTargetc                 C   s   || _ || _i | _d S N)clip	tokenizerparams)selfr	   r    r   9/mnt/c/Users/fbmor/ComfyUI/comfy/supported_models_base.py__init__   s   
zClipTarget.__init__N)__name__
__module____qualname__r   r   r   r   r   r      s    r   c                   @   s   e Zd Zi ZdddZi Zg ZdZdZi Z	e
jZdgZdgZejejejgZdZdZdZdZdd	iZed'd
dZd(ddZdd Zdd Zd)ddZdd Zdd Z dd Z!dd Z"dd Z#dd  Z$d!d" Z%d#d$ Z&d%d& Z'dS )*BASE@   )	num_headsnum_head_channelsNzfirst_stage_model.zcond_stage_model.g       @fp8Fc                 C   sR   | j D ]}||vs| j | || kr dS q|d ur'| jD ]	}||vr& dS qdS )NFT)unet_configrequired_keys)sr   
state_dictkr   r   r   matches8   s   

zBASE.matches c                 C   s   t jjS r   )r   	ModelTypeEPS)r   r   prefixr   r   r   
model_typeC   s   zBASE.model_typec                 C   s   | j d dkS )Nin_channels   )r   )r   r   r   r   inpaint_modelF   s   zBASE.inpaint_modelc                 C   sL   |  | _| j  | _|  | _| j  | _| jD ]
}| j| | j|< qd S r   )copyr   sampling_settingslatent_formatoptimizationsunet_extra_config)r   r   xr   r   r   r   I   s   


zBASE.__init__c                 C   sT   | j d urtj| | j | |||d}ntj| | |||d}|  r(|  |S )N)r"   device)noise_aug_configr   
SD21UNCLIPr"   	BaseModelr%   set_inpaint)r   r   r!   r,   outr   r   r   	get_modelQ   s   
zBASE.get_modelc                 C   s    t j|dd | jD dd}|S )Nc                 S   s   i | ]}|d qS r   r   ).0r   r   r   r   
<dictcomp>[   s    z0BASE.process_clip_state_dict.<locals>.<dictcomp>T)filter_keys)r   state_dict_prefix_replacetext_encoder_key_prefixr   r   r   r   r   process_clip_state_dictZ   s   zBASE.process_clip_state_dictc                 C      |S r   r   r9   r   r   r   process_unet_state_dict^      zBASE.process_unet_state_dictc                 C   r;   r   r   r9   r   r   r   process_vae_state_dicta   r=   zBASE.process_vae_state_dictc                 C      d| j d i}t||S Nr   r   )r8   r   r7   r   r   replace_prefixr   r   r   "process_clip_state_dict_for_savingd      z'BASE.process_clip_state_dict_for_savingc                 C   s$   i }| j d ur| j |d< t||S )Nr   )clip_vision_prefixr   r7   rA   r   r   r   )process_clip_vision_state_dict_for_savingh   s   

z.BASE.process_clip_vision_state_dict_for_savingc                 C   s   ddi}t ||S )Nr   zmodel.diffusion_model.)r   r7   rA   r   r   r   "process_unet_state_dict_for_savingn   s   z'BASE.process_unet_state_dict_for_savingc                 C   r?   r@   )vae_key_prefixr   r7   rA   r   r   r   !process_vae_state_dict_for_savingr   rD   z&BASE.process_vae_state_dict_for_savingc                 C   s   || j d< || _d S )Ndtype)r   manual_cast_dtype)r   rJ   rK   r   r   r   set_inference_dtypev   s   

zBASE.set_inference_dtypec                 C   s   t d| d S )Nzb
WARNING, you accessed {} from the model config object which doesn't exist. Please fix your code.
)loggingwarningformat)r   namer   r   r   __getattr__z   s   zBASE.__getattr__r   r3   )r   N)(r   r   r   r   r*   r   clip_prefixrE   r-   r'   r   LatentFormatr(   rH   r8   torchfloat16bfloat16float32supported_inference_dtypesmemory_usage_factorrK   custom_operationsquant_configr)   classmethodr   r"   r%   r   r2   r:   r<   r>   rC   rF   rG   rI   rL   rQ   r   r   r   r   r      sD    


	r   )	__doc__rT   rM   r   r   r   r   r   r   r   r   r   r   <module>   s    