
    +jo              	           d dl Z d dlmZ d dlmZ d dlmZ d dlmZm	Z	 dde
de
d	e
d
e
fdZ G d de	j                  Z G d de          Zd
efdZdS )    N)override	rearrange)randint)ComfyExtensionio   max_optionsvalue	min_valuereturnc                8    t          |           } fdt          | dz             D             } fd|d |         D             }t          |          dz
  dk    r5t          dt          |          dz
  d                                          }nd}||         S )Nc                 &    g | ]}|z  d k    |S )r    .0ir   s     </home/wildlama/comfy/ComfyUI/comfy_extras/nodes_hypertile.py
<listcomp>z"random_divisor.<locals>.<listcomp>   s"    IIIa%!)q.....    r	   c                     g | ]}|z  S r   r   r   s     r   r   z"random_divisor.<locals>.<listcomp>   s    	5	5	5%1*	5	5	5r   r   r	   )lowhighsize)minrangelenr   item)r   r   r
   divisorsnsidxs   `     r   random_divisorr#   
   s    Iu%%I JIII5EAI66IIIH	5	5	5	5h||4	5	5	5B
2ww{Q!#b''A+D999>>@@c7Nr   c                   J    e Zd Zed             Zedej        fd            ZdS )	HyperTilec                    t          j        ddt           j                            d          t           j                            ddddd	          t           j                            d
dddd	          t           j                            ddddd	          t           j                            ddd          gt           j                                        g          S )Nr%   zmodel/patch/unetmodel	tile_size   r	   i   T)defaultr   maxadvanced	swap_size      	max_depthr   
   scale_depthF)r*   r,   )node_idcategoryinputsoutputs)r   SchemaModelInputIntBooleanOutput)clss    r   define_schemazHyperTile.define_schema   s    y'w''[#1$QUVV[!dSS[!TRR
   MM !!
 
 
 	
r   r   c                    	
 t          d|          dz  	d 
	
fd}
fd}|                                }|                    |           |                    |           |fS )N       c                    | j         d         }|d         }g }t          dz             D ]2}|                    |d         d|z  z  |d         d|z  z  z             3||v r|d         }|d         |d         z  }	|                     d          }
t	          t          j        |
|	z                      t	          t          j        |
|	z                      }}rd|                    |          z  nd}t          ||z            }t          ||z            }||z  dk    r!t          | d||z  ||z  ||          } ||||f| ||fS | ||fS )Noriginal_shaper	   r.   z$b (nh h nw w) c -> (b nh nw) (h w) c)hwnhnw)
shaper   appendr   roundmathsqrtindexr#   r   )qkvextra_optionsmodel_chans
orig_shapeapply_tor   rJ   aspect_ratiohwrF   rG   factorrH   rI   latent_tile_sizer0   r2   r-   temps                   r   hypertile_inz'HyperTile.execute.<locals>.hypertile_in0   s   '"+K&'78JH9q=)) [ [B16!:z"~QRVWQW?X YZZZZh&&%&67$Ry594VVAYYTYrL'899::E$)BQ]L]B^B^<_<_1?JQ!x~~k::::PQ#A'7&'@)LL#A'7&'@)LL7Q;;!!%KqTVwZ[_aZafhmopppAAq>D!Qwa7Nr   c                 v    5\  }}}}d t          | d||          } t          | d||z  ||z            } | S )Nz(b nh nw) hw c -> b nh nw hw c)rH   rI   z"b nh nw (h w) c -> b (nh h nw w) c)rF   rG   r   )outrS   rH   rI   rF   rG   r[   s         r   hypertile_outz(HyperTile.execute.<locals>.hypertile_outI   s[    #B1%E"QSTTT%IQRTWXY]_X_```Jr   )r+   cloneset_model_attn1_patchset_model_attn1_output_patch)r=   r'   r(   r-   r0   r2   r\   r_   mrZ   r[   s      ```   @@r   executezHyperTile.execute+   s    r9--2	 	 	 	 	 	 	 	 	2	 	 	 	 	 KKMM	---	&&}555ur   N)__name__
__module____qualname__classmethodr>   r   
NodeOutputrd   r   r   r   r%   r%      sV        
 
 [
  *R] * * * [* * *r   r%   c                   L    e Zd Zedeeej                          fd            ZdS )HyperTileExtensionr   c                    K   t           gS N)r%   )selfs    r   get_node_listz HyperTileExtension.get_node_listZ   s       
 	
r   N)	re   rf   rg   r   listtyper   	ComfyNodero   r   r   r   rk   rk   Y   sE        
T$r|*<%= 
 
 
 X
 
 
r   rk   c                  "   K   t                      S rm   )rk   r   r   r   comfy_entrypointrt   a   s      r   r   )rM   typing_extensionsr   einopsr   torchr   comfy_api.latestr   r   intr#   rr   r%   rk   rt   r   r   r   <module>rz      s    & & & & & &             / / / / / / / / s # # 3    = = = = = = = =@
 
 
 
 
 
 
 
  2            r   