o
    iF                     @   sz   d dl Z d dlZd dlZd dlZdd ZG dd dZG dd deZG dd	 d	eZG d
d deZ	G dd deZ
dS )    Nc                    s   t  rt rt  S t tr0ttr0   kr$dS t fdd D S t ttfr\tttfr\t	 t	usNt
 t
krPdS tdd t D S z kW S  typ   td Y dS w )NFc                 3   s"    | ]}t  | | V  qd S Nis_equal).0kxy )/mnt/c/Users/fbmor/ComfyUI/comfy/conds.py	<genexpr>   s     zis_equal.<locals>.<genexpr>c                 s   s    | ]
\}}t ||V  qd S r   r   )r   abr
   r
   r   r      s    zcomparison issue with COND)torch	is_tensorequal
isinstancedictkeysalllisttupletypelenzip	Exceptionloggingwarningr   r
   r   r   r      s     

r   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )CONDRegularc                 C   
   || _ d S r   condselfr!   r
   r
   r   __init__      
zCONDRegular.__init__c                 C   s
   |  |S r   )	__class__r"   r
   r
   r   
_copy_with   r%   zCONDRegular._copy_withc                 K   s   |  tj| j|S r   )r'   comfyutilsrepeat_to_batch_sizer!   r#   
batch_sizekwargsr
   r
   r   process_cond!   s   zCONDRegular.process_condc                 C   s6   | j j|j jkr
dS | j j|j jkrtd dS dS )NFz3WARNING: conds not on same device, skipping concat.T)r!   shapedevicer   r   r#   otherr
   r
   r   
can_concat$   s   
zCONDRegular.can_concatc                 C   s(   | j g}|D ]}||j  qt|S r   )r!   appendr   cat)r#   otherscondsr   r
   r
   r   concat,   s   
zCONDRegular.concatc                 C   s   t | j S r   )r   r!   sizer#   r
   r
   r   r9   2   s   zCONDRegular.sizeN)	__name__
__module____qualname__r$   r'   r.   r3   r8   r9   r
   r
   r
   r   r      s    r   c                   @   s   e Zd Zdd ZdS )CONDNoiseShapec                 K   sZ   | j }|d ur#t|d }t|D ]}||d |||  || }q| tj||S )N   )r!   r   rangenarrowr'   r(   r)   r*   )r#   r,   arear-   datadimsir
   r
   r   r.   7   s    zCONDNoiseShape.process_condN)r;   r<   r=   r.   r
   r
   r
   r   r>   6   s    r>   c                   @   s   e Zd Zdd Zdd ZdS )CONDCrossAttnc                 C   s   | j j}|j j}||kr9|d |d ks|d |d krdS t|d |d }|t|d |d  }|dkr9dS | j j|j jkrHtd dS dS )Nr   r?   F      z3WARNING: conds not on same device: skipping concat.T)r!   r/   mathlcmminr0   r   r   )r#   r2   s1s2mult_mindiffr
   r
   r   r3   B   s    
zCONDCrossAttn.can_concatc                 C   s   | j g}| j jd }|D ]}|j }t||jd }|| qg }|D ]}|jd |k r9|d||jd  d}|| q$t|S NrG   )r!   r/   rI   rJ   r4   repeatr   r5   )r#   r6   r7   crossattn_max_lenr   coutr
   r
   r   r8   R   s   
zCONDCrossAttn.concatN)r;   r<   r=   r3   r8   r
   r
   r
   r   rF   A   s    rF   c                   @   4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )CONDConstantc                 C   r   r   r    r"   r
   r
   r   r$   c   r%   zCONDConstant.__init__c                 K   s   |  | jS r   )r'   r!   r+   r
   r
   r   r.   f   s   zCONDConstant.process_condc                 C   s   t | j|js	dS dS NFT)r   r!   r1   r
   r
   r   r3   i   s   zCONDConstant.can_concatc                 C   s   | j S r   r    )r#   r6   r
   r
   r   r8   n      zCONDConstant.concatc                 C   s   dgS rP   r
   r:   r
   r
   r   r9   q   rX   zCONDConstant.sizeNr;   r<   r=   r$   r.   r3   r8   r9   r
   r
   r
   r   rV   b   s    rV   c                   @   rU   )CONDListc                 C   r   r   r    r"   r
   r
   r   r$   v   r%   zCONDList.__init__c                 K   s.   g }| j D ]}|tj|| q| |S r   )r!   r4   r(   r)   r*   r'   )r#   r,   r-   rT   rS   r
   r
   r   r.   y   s   

zCONDList.process_condc                 C   sN   t | jt |jkrdS tt | jD ]}| j| j|j| jkr$ dS qdS rW   )r   r!   r@   r/   )r#   r2   rE   r
   r
   r   r3      s   zCONDList.can_concatc                 C   sR   g }t t| jD ]}| j| g}|D ]
}||j|  q|t| q	|S r   )r@   r   r!   r4   r   r5   )r#   r6   rT   rE   or   r
   r
   r   r8      s   zCONDList.concatc                 C   sL   d}d}| j D ]}| }|t|7 }t|dkr|d }qd||| gS )Nr   rG   )r!   r9   rI   prodr   )r#   r[   rS   r9   r
   r
   r   r9      s   
zCONDList.sizeNrY   r
   r
   r
   r   rZ   u   s    	
rZ   )r   rI   comfy.utilsr(   r   r   r   r>   rF   rV   rZ   r
   r
   r
   r   <module>   s    !