a
    AþdF  ã                   @   sb   d dl Z d dlZd dlZd dlZd dlmZ d dlmZ dd„ Zdd„ Z	dd	„ Z
d
dœdd„ZdS )é    N)ÚThread)Ústartup_timerc                  C   s  t  d¡ t j¡ t  d¡ dd„ ¡ dd l} t d¡ dd l}t d¡ t	j
dtdd	 t	j
dtd
d	 dd l}t d¡ ddlm}m}m}m} t d¡ dd l}t d¡ dd l}t d¡ ddlm}	 |	 ¡  t d¡ ddlm}
m}m} t d¡ d S )Nztorch.distributed.nnÚxformersc                 S   s   d|   ¡ vS )Nz"A matching Triton is not available)Ú
getMessage)Úrecord© r   ú:/var/www/html/stable-diffusion-webui/modules/initialize.pyÚ<lambda>   ó    zimports.<locals>.<lambda>r   zimport torchÚignoreÚpytorch_lightning©ÚactionÚcategoryÚmoduleÚtorchvisionzimport gradio)ÚpathsÚtimerÚimport_hookÚerrorszsetup pathsz
import ldmz
import sgm)Úshared_initzinitialize shared)Ú
processingÚgradio_extensonsÚuizother imports)ÚloggingÚ	getLoggerÚsetLevelÚERRORÚ	addFilterÚtorchr   r   r   ÚwarningsÚfilterwarningsÚDeprecationWarningÚUserWarningÚgradioÚmodulesr   r   r   r   Zldm.modules.encoders.modulesZsgm.modules.encoders.modulesr   Ú
initializer   r   r   )r   r   r$   r   r   r   r   ZldmZsgmr   r   r   r   r   r   r   Úimports
   s*    






r'   c                  C   s*   ddl m}  | js&ddlm} | ¡  d S )Nr   ©Úcmd_opts)r   )Úmodules.shared_cmd_optionsr)   Úskip_version_checkr%   r   Úcheck_versions)r)   r   r   r   r   r,   )   s    r,   c                  C   sÔ   ddl m}  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  ddl m} | ¡  ddl m	} | 
¡  t d¡ ddlm} ddl m} tjdtd	d
 | 
|j¡ t d¡ ddl m} | 
|j¡ t d¡ tdd d S )Nr   ©Úinitialize_util©Úmodelloader©Ú	sd_modelszsetup SD modelr(   )Úcodeformer_modelr   z(torchvision.transforms.functional_tensorr   zsetup codeformer)Úgfpgan_modelzsetup gfpganF©Úreload_script_modules)r%   r.   Úfix_torch_versionÚfix_asyncio_event_loop_policyÚvalidate_tls_optionsÚconfigure_sigint_handlerÚconfigure_opts_onchanger0   Zcleanup_modelsr2   Zsetup_modelr   r   r*   r)   r3   r    r!   r#   Úcodeformer_models_pathr4   Úgfpgan_models_pathÚinitialize_rest)r.   r0   r2   r)   r3   r4   r   r   r   r&   1   s(    


r&   Fr5   c                    sn  ddl m} ddlm} | ¡  t d¡ ddlm} | ¡  t d¡ ddlm	} | 
¡  t d¡ dd	lm‰m}m} |jr˜| ¡ jˆ_| ¡  d
S ddlm} | ¡  t d¡ ddlm} | |j¡ t d¡ t d¡ | ¡  W d
  ƒ n1 s0    Y  | rBdd„ tj ¡ D ƒD ]}	t |	¡ q&t d¡ ddlm}
 |
 ¡  t d¡ ddlm} |  ¡  t d¡ ddlm!} |j! "¡  t d¡ ddlm#}m$}m%‰  | &|j'¡ ˆ  '¡  t d¡ ddlm(} | )¡  t d¡ ‡ ‡fdd„}t*|d +¡  dd lm,} | -¡  t d!¡ dd"lm.} | /¡  | 0¡  dd#lm1} | /¡  | 2¡  t d$¡ d
S )%zE
    Called both from initialize() and when reloading the webui.
    r   r(   )Úsd_samplerszset samplers)Ú
extensionszlist extensionsr-   zrestore config state file)ÚsharedÚupscalerÚscriptsNr1   zlist SD models)Úlocalizationzlist localizationszload scriptsc                 S   s   g | ]\}}|  d ¡r|‘qS )z
modules.ui)Ú
startswith)Ú.0Únamer   r   r   r   Ú
<listcomp>r   r
   z#initialize_rest.<locals>.<listcomp>zreload script modulesr/   zload upscalers)Úsd_vaezrefresh VAE)Útextual_inversionz#refresh textual inversion templates)Úscript_callbacksÚsd_hijack_optimizationsÚ	sd_hijackzscripts list_optimizers)Úsd_unetzscripts list_unetsc                     s0   ˆj  ˆ jdu rˆ  ¡  ddlm}  |  ¡  dS )a,  
        Accesses shared.sd_model property to load model.
        After it's available, if it has been loaded before this access by some extension,
        its optimization may be None because the list of optimizaers has neet been filled
        by that time, so we apply optimization again.
        Nr   ©Údevices)Úsd_modelZcurrent_optimizerZapply_optimizationsr%   rP   Zfirst_time_calculationrO   ©rM   rA   r   r   Ú
load_model‹   s
    
z#initialize_rest.<locals>.load_model)Útarget)Úshared_itemszreload hypernetworks)Úui_extra_networks)Úextra_networkszinitialize extra networks)3r*   r)   r%   r?   Zset_samplersr   r   r@   Úlist_extensionsr.   Úrestore_config_state_filerA   rB   rC   Úui_debug_modeZUpscalerLanczosZscalersZsd_upscalersZload_scriptsr2   Zlist_modelsrD   Zlist_localizationsÚlocalizations_dirÚsubcategoryÚsysÚitemsÚ	importlibÚreloadr0   Zload_upscalersrI   Zrefresh_vae_listrJ   Z list_textual_inversion_templatesrK   rL   rM   Zon_list_optimizersZlist_optimizersrN   Z
list_unetsr   ÚstartrU   Zreload_hypernetworksrV   r&   Zregister_default_pagesrW   Zregister_default_extra_networks)r6   r)   r?   r@   r.   rB   rC   r2   rD   r   r0   rI   rJ   rK   rL   rN   rS   rU   rV   rW   r   rR   r   r>   N   sn    




(







r>   )r_   r   r]   r    Ú	threadingr   Úmodules.timerr   r'   r,   r&   r>   r   r   r   r   Ú<module>   s   