ó
    USh;  ã                   ó´   • S SK r S SKrS SKJr  S SKrS SKJr  S SKJrJ	r	J
r
  SS jrS rS rS rS	 rS
 rSS jrS rSS jr " S S\R(                  5      rg)é    N)Úoptim)Ú
isfunction)ÚImageÚ	ImageDrawÚ	ImageFontc                 óœ  ^^	^
• [        T5      n[        5       n[        U5       HÝ  m	[        R                  " SU SS9n[
        R                  " U5      n[        R                  " SUS9n[        SU S   S-  -  5      m
S	R                  U	U
U4S
 j[        S[        TT	   5      T
5       5       5      n UR                  SUSUS9  [        R                  " U5      R!                  SSS5      S-  S-
  nUR#                  U5        Mß     [        R$                  " U5      n[&        R(                  " U5      nU$ ! [         a    [        S5         N‡f = f)NÚRGBÚwhite)Úcolorzdata/DejaVuSans.ttf)Úsizeé(   r   é   Ú
c              3   ó8   >#   • U  H  nTT   XT-    v •  M     g 7f©N© )Ú.0ÚstartÚbiÚncÚxcs     €€€Ú8/home/gothic/public_html/Fooocus/ldm_patched/ldm/util.pyÚ	<genexpr>Ú!log_txt_as_img.<locals>.<genexpr>   s    øé € ÐZÒ@Y°u˜"˜R™& ¨r¡zÕ2Ò@Yùs   ƒ)r   r   Úblack)ÚfillÚfontz)Cant encode string for logging. Skipping.é   é   g     à_@ç      ð?)ÚlenÚlistÚranger   Únewr   ÚDrawr   ÚtruetypeÚintÚjoinÚtextÚUnicodeEncodeErrorÚprintÚnpÚarrayÚ	transposeÚappendÚstackÚtorchÚtensor)Úwhr   r   ÚbÚtxtsÚtxtÚdrawr   Úlinesr   r   s    `       @@r   Úlog_txt_as_imgr9      s  ú€ ô 	ˆB‹€AÜ‹6€DÜ�AŽhˆÜ�iŠi˜˜r¨Ñ1ˆÜ�~Š~˜cÓ"ˆÜ×!Ò!Ð"7¸dÑCˆÜ��r˜!‘u˜s‘{Ñ#Ó$ˆØ—	‘	ÖZÄÀaÌÈRÐPRÉVËÐVXÔ@YÓZÓZˆð	?Ø�I‰I�f˜e¨'¸ˆIÑ=ô �hŠh�s‹m×%Ñ% a¨¨AÓ.°Ñ6¸Ñ<ˆØ�‰�CÖñ ô �8Š8�D‹>€DÜ�<Š<˜Ó€DØ€Køô "ó 	?ÜÐ=Ö>ð	?ús   Â1D3Ä3EÅ
Ec                 ó¤   • [        U [        R                  5      (       d  g[        U R                  5      S:H  =(       a    U R                  S   S:„  $ ©NFé   r   é   ©Ú
isinstancer1   ÚTensorr!   Úshape©Úxs    r   ÚismaprD   #   s:   € Ü�aœŸ™×&Ñ&ØÜ�—‘‹L˜AÑ×3 A§G¡G¨A¡J°¡NÐ3ó    c                 óÖ   • [        U [        R                  5      (       d  g[        U R                  5      S:H  =(       a+    U R                  S   S:H  =(       d    U R                  S   S:H  $ r;   r>   rB   s    r   ÚisimagerG   )   sK   € Ü�aœŸ™×%Ñ%ØÜ�—‘‹L˜AÑ×G A§G¡G¨A¡J°!¡O×$F°q·w±w¸q±zÀQ±ÐGrE   c                 ó
   • U S L$ r   r   rB   s    r   ÚexistsrI   /   s   € Ø�Dˆ=ÐrE   c                 óX   • [        U 5      (       a  U $ [        U5      (       a  U" 5       $ U$ r   )rI   r   )ÚvalÚds     r   ÚdefaultrM   3   s%   € Üˆc‡{�{Øˆ
Ü˜Q—-‘-‰1‹3Ð& QÐ&rE   c           
      ól   • U R                  [        [        S[        U R                  5      5      5      S9$ )z¢
https://github.com/openai/guided-diffusion/blob/27c20a8fab9cb472df5d6bdd6c8d11c8f430b924/guided_diffusion/nn.py#L86
Take the mean over all non-batch dimensions.
r   )Údim)Úmeanr"   r#   r!   rA   )r2   s    r   Ú	mean_flatrQ   9   s*   € ð
 �;‰;œ4¤ a¬¨V¯\©\Ó):Ó ;Ó<ˆ;Ð=Ð=rE   c                 ó¦   • [        S U R                  5        5       5      nU(       a)  [        U R                  R                   SUS-  S S35        U$ )Nc              3   ó@   #   • U  H  oR                  5       v •  M     g 7fr   )Únumel)r   Úps     r   r   Úcount_params.<locals>.<genexpr>B   s   é € Ð=Ò*< Q—w‘w—y�yÒ*<ùs   ‚z has g�íµ ÷Æ°>z.2fz
 M params.)ÚsumÚ
parametersr+   Ú	__class__Ú__name__)ÚmodelÚverboseÚtotal_paramss      r   Úcount_paramsr^   A   sL   € ÜÑ=¨%×*:Ñ*:Ô*<Ó=Ó=€LÞÜ�—‘×)Ñ)Ð*¨%°¸UÑ0BÀ3Ð/GÀzÐRÔSØÐrE   c           	      ó˜   • SU ;  a  U S:X  a  g U S:X  a  g [        S5      e[        U S   5      " S0 U R                  S[        5       5      D6$ )NÚtargetÚ__is_first_stage__Ú__is_unconditional__z%Expected key `target` to instantiate.Úparamsr   )ÚKeyErrorÚget_obj_from_strÚgetÚdict)Úconfigs    r   Úinstantiate_from_configri   H   sS   € Ø�vÓØÐ)Ó)ØØÐ-Ó-ØÜÐ>Ó?Ð?Ü˜F 8Ñ,Ô-ÑM°·
±
¸8ÄTÃVÓ0LÑMÐMrE   c                 óÎ   • U R                  SS5      u  p#U(       a,  [        R                  " U5      n[        R                  " U5        [	        [        R                  " US S9U5      $ )NÚ.r   )Úpackage)ÚrsplitÚ	importlibÚimport_moduleÚreloadÚgetattr)Ústringrp   ÚmoduleÚclsÚ
module_imps        r   re   re   R   sO   € Ø—-‘-  QÓ'�K€FÞÜ×,Ò,¨VÓ4ˆ
Ü×Ò˜Ô$Ü”9×*Ò*¨6¸4Ñ@À#ÓFÐFrE   c                   óp   ^ • \ rS rSr   SU 4S jjrU 4S jr\R                  " 5       SS j5       rSr	U =r
$ )ÚAdamWwithEMAandWingséZ   r   c
                 ó  >• SU::  d  [        SR                  U5      5      eSU::  d  [        SR                  U5      5      eSUS   s=::  a  S:  d  O  [        SR                  US   5      5      eSUS   s=::  a  S:  d  O  [        SR                  US   5      5      eSU::  d  [        S	R                  U5      5      eSUs=::  a  S::  d  O  [        S
R                  U5      5      e[        X#UXVUX‰S9n
[        TU ]  X5        g)z0AdamW that saves EMA versions of the parameters.g        zInvalid learning rate: {}zInvalid epsilon value: {}r   r    z%Invalid beta parameter at index 0: {}r   z%Invalid beta parameter at index 1: {}zInvalid weight_decay value: {}zInvalid ema_decay value: {})ÚlrÚbetasÚepsÚweight_decayÚamsgradÚ	ema_decayÚ	ema_powerÚparam_namesN)Ú
ValueErrorÚformatrg   ÚsuperÚ__init__)Úselfrc   rz   r{   r|   r}   r~   r   r€   r�   ÚdefaultsrY   s              €r   r…   ÚAdamWwithEMAandWings.__init__\   s  ø€ ð �b‹yÜÐ8×?Ñ?ÀÓCÓDÐDØ�c‹zÜÐ8×?Ñ?ÀÓDÓEÐEØ�e˜A‘hÕ$ Õ$ÜÐD×KÑKÈEÐRSÉHÓUÓVÐVØ�e˜A‘hÕ$ Õ$ÜÐD×KÑKÈEÐRSÉHÓUÓVÐVØ�lÓ"ÜÐ=×DÑDÀ\ÓRÓSÐSØ�iÕ& 3Õ&ÜÐ:×AÑAÀ)ÓLÓMÐMÜ˜2°Ø%1ÈiØ"+ñFˆô 	‰Ñ˜Õ*rE   c                 ón   >• [         TU ]  U5        U R                   H  nUR                  SS5        M     g )Nr~   F)r„   Ú__setstate__Úparam_groupsÚ
setdefault)r†   ÚstateÚgrouprY   s      €r   rŠ   Ú!AdamWwithEMAandWings.__setstate__q   s0   ø€ Ü‰Ñ˜UÔ#Ø×&Ô&ˆEØ×Ñ˜Y¨Ö.ò 'rE   c                 ór  • SnUb%  [         R                  " 5          U" 5       nSSS5        U R                   GHi  n/ n/ n/ n/ n/ n/ n	/ n
/ nUS   nUS   u  pÞUS   nUS   nUS    GH¨  nUR                  c  M  UR	                  U5        UR                  R
                  (       a  [        S5      eUR	                  UR                  5        U R                  U   n[        U5      S:X  a­  SUS	'   [         R                  " U[         R                  S
9US'   [         R                  " U[         R                  S
9US'   U(       a&  [         R                  " U[         R                  S
9US'   UR                  5       R                  5       R                  5       US'   UR	                  US   5        UR	                  US   5        UR	                  US   5        U(       a  U
R	                  US   5        US	==   S-  ss'   UR	                  US	   5        GM«     [        R                  R!                  UUUUU
UUUUUS   US   US   SS9  [#        USWS	   U* -  -
  5      n[%        XH5       H6  u  nnUR'                  U5      R)                  UR                  5       SU-
  S9  M8     GMl     U$ ! , (       d  f       GN‹= f)z�Performs a single optimization step.
Args:
    closure (callable, optional): A closure that reevaluates the model
        and returns the loss.
Nr~   r{   r   r€   rc   z'AdamW does not support sparse gradientsr   Ústep)Úmemory_formatÚexp_avgÚ
exp_avg_sqÚmax_exp_avg_sqÚparam_exp_avgr   rz   r}   r|   F)r~   Úbeta1Úbeta2rz   r}   r|   Úmaximize)Úalpha)r1   Úenable_gradr‹   Úgradr/   Ú	is_sparseÚRuntimeErrorr�   r!   Ú
zeros_likeÚpreserve_formatÚdetachÚfloatÚcloner   Ú_functionalÚadamwÚminÚzipÚmul_Úadd_)r†   ÚclosureÚlossrŽ   Úparams_with_gradÚgradsÚexp_avgsÚexp_avg_sqsÚema_params_with_gradÚ
state_sumsÚmax_exp_avg_sqsÚstate_stepsr~   r—   r˜   r   r€   rU   r�   Úcur_ema_decayÚparamÚ	ema_params                         r   r‘   ÚAdamWwithEMAandWings.stepv   s­  € ð ˆØÑÜ×"Ò"Õ$Ù“y�÷ %ð ×&Õ&ˆEØ!ÐØˆEØˆHØˆKØ#%Ð ØˆJØ ˆOØˆKØ˜IÑ&ˆGØ  ™>‰LˆEØ˜kÑ*ˆIØ˜kÑ*ˆIà˜8•_�Ø—6‘6‘>ÙØ ×'Ñ'¨Ô*Ø—6‘6×#×#Ü&Ð'PÓQÐQØ—‘˜QŸV™VÔ$àŸ
™
 1™�ô �u“: “?Ø$%�E˜&‘Mä',×'7Ò'7¸Ì×I^ÑI^Ñ'_�E˜)Ñ$ä*/×*:Ò*:¸1ÌE×LaÑLaÑ*b�E˜,Ñ'Þä27×2BÒ2BÀ1ÔTY×TiÑTiÑ2j˜Ð.Ñ/à-.¯X©X«Z×-=Ñ-=Ó-?×-EÑ-EÓ-G�E˜/Ñ*à—‘  iÑ 0Ô1Ø×"Ñ" 5¨Ñ#6Ô7Ø$×+Ñ+¨E°/Ñ,BÔCæØ#×*Ñ*¨5Ð1AÑ+BÔCð �f“ Ñ"“à×"Ñ" 5¨¡=×1ñC %ôF ×Ñ×#Ñ#Ð$4ØØØØ#ØØ#ØØØ˜T‘{Ø!& ~Ñ!6Ø˜e™Ø"ð $ñ $ô   	¨1¨u°V©}ÀÀ
Ñ/JÑ+JÓKˆMÜ$'Ð(8Ö$OÑ ��yØ—‘˜}Ó-×2Ñ2°5·;±;³=ÈÈMÑHYÐ2ÓZô %PñA 'ðF ˆ÷M %Ö$ús   ›J'Ê'
J6)gü©ñÒMbP?)gÍÌÌÌÌÌì?g+‡ÙÎ÷ï?g:Œ0âŽyE>g{®Gáz„?Fg§èH.ÿï?r    r   r   )rZ   Ú
__module__Ú__qualname__Ú__firstlineno__r…   rŠ   r1   Úno_gradr‘   Ú__static_attributes__Ú__classcell__)rY   s   @r   rw   rw   Z   s2   ø† àAFØ>DØ+-÷+õ*/ð
 ‡]‚]ƒ_óNó öNrE   rw   )é
   )F)rn   r1   r   Únumpyr,   Úinspectr   ÚPILr   r   r   r9   rD   rG   rI   rM   rQ   r^   ri   re   Ú	Optimizerrw   r   rE   r   Ú<module>rÃ      s\   ðÛ ã Ý Û å ß +Ñ +ôò04òHòò'ò>ôòNôGôk˜5Ÿ?™?õ krE   