
    ^(jy                         d dl Z d dlZd dlZd dlZd dlmZ d dlZd dlm	Z	  G d de      Z
ddZ G d de      Zdd	Zd
 Zd ZdZdad ad ZddZy)    N)
NamedTuple)QuantizedTensorc                   6    e Zd ZU eed<   eed<   eed<   eed<   y)TensorFileSlicefile_reflockoffsetsizeN)__name__
__module____qualname__object__annotations__int     A/Users/danicosta/Desktop/Flux2/ComfyUI/comfy/memory_management.pyr   r      s    
LK
Ir   r   c           
      	   t        | t              rt        | j                  ||j                  nd |||j                  nd       sy|c|j                  j
                  }|j                  j                  | j                  d       t        j                  |j                  |      |_        |q|j                  j
                  }|j                  j                  ||j                  n| j                  d       t        j                  |j                  |      |_        yt        | j                         dd       }|y||j                  j                  dk7  r||}d }|j                  }||||G|j                  j                  dk7  s|j                         |j                         z  |j                   k  s|G|j                  j                  dk(  s|j                         |j                         z  |j                   k  sQ| j                         | j                         z  |j                   k7  s#| j#                         dk7  s| j%                         sy|j                   dk(  ry|n|t        |d	d      nd}t&        j(                  j+                  ||j,                  |j                   ||j/                         |j                  j0                  d
       yt        |j                         dd       }||t        |d	d      nd}||j/                         nd}	|j2                  5  |j5                  ||j,                  |j                   |j/                         |j7                         z
  ||	|d n|j                  j0                         d d d        yt9        |d      rt9        |d      syt:        j<                  |j                   z  }
t?        |
jA                  |j/                                     }	 |j2                  5  |jC                  |j,                         d}||j                   k  rI	 |jE                  ||d        }|dk  r	 d d d        |jI                          y||z  }||j                   k  rId d d        	 |jI                          y# 1 sw Y   yxY w# tF        $ r Y d d d        |jI                          yw xY w# 1 sw Y   NxY w# |jI                          w xY w)N)streamdestination2F)non_blocking)
orig_dtypeT_comfy_tensor_file_slicecpur   cuda_stream)	mark_cold_comfy_hostbuf)r	   r   
device_ptrdeviceseekreadinto)%
isinstancer   read_tensor_file_slice_into_qdata_paramsr   	copy_fromdataclassesreplacegetattruntyped_storager   typer   numelelement_sizer
   storage_offsetis_contiguouscomfy_aimdohost_bufferread_file_to_devicer	   data_ptrindexr   read_file_sliceget_raw_addresshasattrctypesc_ubyte
memoryviewfrom_addressr    r!   OSErrorrelease)tensordestinationr   r   dst_orig_dtypeinfofile_obj
stream_ptrhostbufr   buf_typeviewdonens                 r   r#   r#      s   &/**6==ALAX;+=+=^bkqP\Ph9L9Lnru "(00;;N))&..u)M"-"5"5k6I6IVd"eK#)11<<N  **+BY;+>+>_e_m_m  }A*  B#.#6#6|7K7KXf#gL 6))+-GND|;#5#5#:#:e#CH\"}}H#(<'[-?-?-D-D-MQ\QbQbQdgrgg  hB  RB  EI  EN  EN  RN(l.A.A.F.F%.OS_SeSeSgjv  kD  kD  kF  TF  IM  IR  IR  TR||~ 3 3 55B$$&!+'')yyA~:@:LWV]A6RS
33Hdkk4994>@U@U@W4@4G4G4M4M>C 	4 	E k1135EtLG:@:LWV]A6RS
0<0H\**,a
YY##Hdkk499+6+?+?+AGD[D[D]+]+5/93?3G4\M`M`MfMf	 $ h  8V$GHj,I~~		)Hh++K,@,@,BCDDYYMM$++&D"! ))$tu+6A 6   	 	 "  9    !   	! Y 	sg   $A$R0S <-R?*R>R?S R?2S R	R<!R?"S ;R<<R??SS Sc                   B    e Zd ZU eed<   ej                  ed<   d Zd Zy)TensorGeometryshapedtypec                     | j                   j                  rt        j                  | j                         nt        j                  | j                         }|j
                  dz  S )N   )rL   is_floating_pointtorchfinfoiinfobits)selfrA   s     r   r-   zTensorGeometry.element_sizeg   s@    *.***F*Fu{{4::&EKKX\XbXbLcyyA~r   c                 @    t        j                  | j                        S N)mathprodrK   )rT   s    r   r,   zTensorGeometry.numelk   s    yy$$r   N)	r   r   r   anyr   rP   rL   r-   r,   r   r   r   rJ   rJ   c   s    J;;%r   rJ   c                     g }| D ]t  }|t        |t              r|j                  |       '|j                  }t	        |d      r|j
                  }||}|j                  t        |j                  |             v |S )N_model_dtype)rK   rL   )r"   r   appendrL   r7   r[   rJ   rK   )tensorsrL   
geometriesttdtypes        r   tensors_to_geometriesra   n   sx    J9
1o6a 1n%^^FF.qwwfEF  r   c           	      n   t        | t              r"t        | D cg c]  }t        |       c}      S t        | t              r6| j                         \  }}t        |D cg c]  }t        | |       c}      S | y| j                         | j                         z  }d}||z   dz
  |z  |z  S c c}w c c}w )Nr   i      )	r"   listsumvram_aligned_sizer   __tensor_flatten__r)   r,   r-   )r>   r_   inner_tensors_attrr
   aligment_reqs          r   rf   rf   |   s    &$&9&Q%a(&9::&/*!446q ]!T]T764#8]!TUU~<<>F//11DL<!#4|CC : "Us   B-B2c           	         d}g }|j                         dk7  s|j                         dk7  r*t        d|j                          d|j                   d      | D ]f  }||j	                  d        t        |t              r.|j                         \  }}|D ci c]  }|t        ||       }}nd|i}i }	|j                         D ]  \  }}
|
j                         |
j                         z  }||z   |j                         kD  r#t        d||z    d|j                          d	      ||||z    j                  |
j                  
      j                  |
j                        |	|<   |t        |
      z  } t        |t              r)|j	                  t        j                  |	dd             S|j	                  |	d          i |S c c}w )Nr   rc   z'Buffer must be 1D and single-byte (got zD )datazBuffer too small: needs z bytes, but only has z. )rL   )dimr-   
ValueErrorrL   r\   r"   r   rg   r)   itemsr,   rF   rK   rf   __tensor_unflatten__)r]   gatheredr	   
dest_viewsr>   rh   qt_ctxrj   	templatesactualstemplater
   s               r   interpret_gathered_likery      s   FJ||~h335:B8<<>BRRTU]UcUcTddefgg>d#fo.$*$=$=$?!M6BOQ-$$ 55-IQ &*I'oo/ND(>>#h&;&;&==D}x~~// #;FTM?J_`h`n`n`p_qqs!tuu$VF4K8==HNN=SXXYaYgYghGDM'11F 0 fo.oBB7FTUWXYZgfo./ 2 # Rs   GFc                 2    | a t        dt        |            ay )Nr   )extra_ram_release_callbackmaxr   RAM_CACHE_HEADROOM)callbackheadrooms     r   set_ram_cache_release_stater      s     "*QH.r   c                 *    t         yt        | |      S )Nr   )free_active)r{   )targetr   s     r   extra_ram_releaser      s    !)%f+FFr   )NNrV   )F)rW   r8   r'   rP   typingr   comfy_aimdo.host_bufferr0   comfy.quant_opsr   r   r#   rJ   ra   rf   ry   aimdo_enabledr{   r}   r   r   r   r   r   <module>r      sh          +j Ob	%Z 	%D D !  /Gr   