o
    ¶Ïiæ	  ã                   @   s"   d dl Z G dd„ dƒZdd„ ZdS )é    Nc                   @   s¸   e Z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d„ Zdd„ Zdd„ Zdd„ Zdd„ Zedd„ ƒZedd „ ƒZed!d"„ ƒZed#d$„ ƒZed%d&„ ƒZd'S )(ÚNestedTensorc                 C   s   t |ƒ| _d| _d S )NT)ÚlistÚtensorsÚ	is_nested)Úselfr   © r   ú1/mnt/c/Users/fbmor/ComfyUI/comfy/nested_tensor.pyÚ__init__   s   

zNestedTensor.__init__c                 C   s
   t | jƒS ©N)r   r   ©r   r   r   r   Ú_copy   s   
zNestedTensor._copyc                 C   sh   |   ¡ }t|tƒr t|jƒD ]\}}|||j| ƒ|j|< q|S t|jƒD ]\}}|||ƒ|j|< q%|S r
   )r   Ú
isinstancer   Ú	enumerater   )r   ÚotherÚ	operationÚoÚiÚtr   r   r   Úapply_operation   s   
þzNestedTensor.apply_operationc                 C   ó   |   |dd„ ¡S )Nc                 S   s   | | S r
   r   ©ÚxÚyr   r   r   Ú<lambda>   ó    z&NestedTensor.__add__.<locals>.<lambda>©r   ©r   Úbr   r   r   Ú__add__   ó   zNestedTensor.__add__c                 C   r   )Nc                 S   s   | | S r
   r   r   r   r   r   r      r   z&NestedTensor.__sub__.<locals>.<lambda>r   r   r   r   r   Ú__sub__   r   zNestedTensor.__sub__c                 C   r   )Nc                 S   s   | | S r
   r   r   r   r   r   r      r   z&NestedTensor.__mul__.<locals>.<lambda>r   r   r   r   r   Ú__mul__   r   zNestedTensor.__mul__c                 C   r   )Nc                 S   s   | | S r
   r   r   r   r   r   r   "   r   z*NestedTensor.__truediv__.<locals>.<lambda>r   r   r   r   r   Ú__truediv__!   r   zNestedTensor.__truediv__c                    ó   |   d ‡ ‡fdd„¡S )Nc                    ó   | j ˆ i ˆ¤ŽS r
   )Ú__getitem__r   ©ÚargsÚkwargsr   r   r   %   ó    z*NestedTensor.__getitem__.<locals>.<lambda>r   ©r   r'   r(   r   r&   r   r%   $   ó   zNestedTensor.__getitem__c                 C   s   | j S r
   )r   r   r   r   r   Úunbind'   s   zNestedTensor.unbindc                 O   s6   |   ¡ }t|jƒD ]\}}|j|i |¤Ž|j|< q	|S r
   )r   r   r   Úto)r   r'   r(   r   r   r   r   r   r   r-   *   s   zNestedTensor.toc                 O   s   | j d j|i |¤ŽS ©Nr   )r   Únew_onesr*   r   r   r   r/   0   r+   zNestedTensor.new_onesc                 C   s   | j tjdS )N)Údtype)r-   ÚtorchÚfloatr   r   r   r   r2   3   ó   zNestedTensor.floatc                    r#   )Nc                    r$   r
   )Úchunkr   r&   r   r   r   7   r)   z$NestedTensor.chunk.<locals>.<lambda>r   r*   r   r&   r   r4   6   r+   zNestedTensor.chunkc                 C   s   | j d  ¡ S r.   )r   Úsizer   r   r   r   r5   9   r3   zNestedTensor.sizec                 C   ó   | j d jS r.   )r   Úshaper   r   r   r   r7   <   ó   zNestedTensor.shapec                 C   s    d}| j D ]}t|j|ƒ}q|S r.   )r   ÚmaxÚndim)r   Údimsr   r   r   r   r:   @   s   
zNestedTensor.ndimc                 C   r6   r.   )r   Údevicer   r   r   r   r<   G   r8   zNestedTensor.devicec                 C   r6   r.   )r   r0   r   r   r   r   r0   K   r8   zNestedTensor.dtypec                 C   r6   r.   )r   Úlayoutr   r   r   r   r=   O   r8   zNestedTensor.layoutN)Ú__name__Ú
__module__Ú__qualname__r	   r   r   r   r    r!   r"   r%   r,   r-   r/   r2   r4   r5   Úpropertyr7   r:   r<   r0   r=   r   r   r   r   r      s2    




r   c                 O   sl   g }t t| d jƒƒD ]&}g }t t| ƒƒD ]}| | | j| ¡ q| tj|g|¢R i |¤Ž¡ qt|ƒS r.   )ÚrangeÚlenr   Úappendr1   Úcatr   )r   r'   r(   Úcated_tensorsr   ÚtensÚjr   r   r   Ú
cat_nestedT   s    rI   )r1   r   rI   r   r   r   r   Ú<module>   s    Q