
    +j]                    "   d Z ddlmZ ddlZddlZddlZddlZddlZddl	Zddl
Z
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adadadada	 dadddZej                            dd          d	k    Zd6dZd Zd Zd Zd Z d Z!ej
        "                    d          Z#ej
        "                    d          Z$d Z%d Z&d Z'd Z(d Z)d Z*d Z+d Z,d Z-d7d Z.d8d"Z/d9d%Z0d& Z1d:d)Z2d;d-Z3d<d/Z4d<d0Z5d1 Z6ej7        d2             Z8d3 Z9d=d4Z:d=d5Z;dS )>z6
This file must not depend on any other CuPy modules.
    )annotationsN)Any )ncclcutensorCUPY_DEBUG_LIBRARY_LOAD01msgstrreturnNonec                    t           rCt          j                            d|  d           t          j                                         d S d S )Nz[CUPY_DEBUG_LIBRARY_LOAD] 
)_debugsysstderrwriteflush)r   s    T/home/wildlama/comfy/ComfyUI/.venv/lib/python3.11/site-packages/cupy/_environment.py_logr   E   sP     
=c===>>>
     c                 B    t           dk    rt                      a t           S Nr   )
_cuda_path_get_cuda_path r   r   get_cuda_pathr   K         R#%%
r   c                 B    t           dk    rt                      a t           S r   )
_nvcc_path_get_nvcc_pathr   r   r   get_nvcc_pathr#   S   r   r   c                 B    t           dk    rt                      a t           S r   )
_rocm_path_get_rocm_pathr   r   r   get_rocm_pathr'   [   r   r   c                 B    t           dk    rt                      a t           S r   )_hipcc_path_get_hipcc_pathr   r   r   get_hipcc_pathr+   c   s      b%''r   c                 B    t           dk    rt                      a t           S r   )	_cub_path_get_cub_pathr   r   r   get_cub_pathr/   k   s     B!OO	r   linuxwin32c                    t           j                            d          } | dS t          rht	          j                    }|dk    r(t           j                            d          r| d}nd}n| d}t           j                            | d|          }n*t          r!t           j                            | d          }nJ t           j                            |          r|ndS )	zThis works since CUDA 12.0+.CONDA_PREFIXNaarch64z/etc/nv_tegra_releasez-linuxz
sbsa-linuxtargetsLibrary)
osenvironget_PLATFORM_LINUXplatformmachinepathexistsjoin_PLATFORM_WIN32)conda_prefixplatarch	cuda_paths       r   _get_conda_cuda_pathrE   w   s    :>>.11Lt !!9w~~566 $#???DGLLy$??			 GLLy99		uy11;99t;r   c                 ,   t                      } | | d         dk    rt                      }||S ddlm}m} 	  |d          }t
          j                            t
          j                            t
          j                            |j	                                      }|j
        dk    r't                      }|                    |          sJ |S |j
        dk    r?t          j        d|          r(t          rt
          j                            |          }|S d S t          rBt
          j                            |          dk    rt
          j                            |          }|S # |$ r Y nw xY wt
          j                            d	          rd	S d S )
N	packagingcondar   load_nvidia_dynamic_libDynamicLibNotFoundErrornvrtczsite-packageszsite-packages.*nvidia.*cu\d{2}binz/usr/local/cuda)get_preload_configrE   cuda.pathfinderrJ   rK   r7   r=   dirnamerealpathabs_path	found_via
startswithresearchr@   basenamer>   )configconda_cuda_pathrJ   rK   rL   rD   s         r   r   r      s     !!Ff[1W<<.00&"": : : : : : : :''00 GOOGOOBG,,U^<<==? ?	?g%%244O"--i88888""_// y:IFF !" ; "	 : :I  4  	3rw//	::eCC	22I1 #   6 
w~~'(( !  4s   E( (E0/E0c                     t           j                            dd           } | | S ddlm}  |d          } | | S t                      }|d S t          j        dt           j        	                    |d                    S )NNVCCr   )find_nvidia_binary_utilitynvccrM   r=   )
r7   r8   r9   rO   r\   r   shutilwhichr=   r?   )	nvcc_pathr\   rD   s      r   r"   r"      s    
vt,,I ;:::::**622I It<RW\\)U%C%CDDDDr   c                 n   t           j                            dd          } t           j                            |           r| S t          j        d          }|<t           j                            t           j                            |                    S t           j                            d          rdS d S )N	ROCM_HOMEr   hipccz	/opt/rocm)r7   r8   r9   r=   r>   r_   r`   rP   )	rocm_path
hipcc_paths     r   r&   r&      s    
{B//I	w~~i    g&&Jwrwz::;;; 
w~~k"" {4r   c                     t                      } | d S t          j        dt          j                            | d                    S )Nrd   rM   r^   )r'   r_   r`   r7   r=   r?   )re   s    r   r*   r*      s=     It<bgll9e&D&DEEEEr   c                    ddl m}  t          j                            t          j                            t                              }| j        sCt          j                            t          j        	                    |d                    rd}nUd }nRt                      }|@t          j                            t          j        	                    |d                    rd}nd }|S )Nr   )runtimez_core/include/cupy/_cccl/cubz<bundle>zinclude/hipcubz<ROCm>)cupy_backends.cuda.apiri   r7   r=   rP   abspath__file__is_hipisdirr?   r'   )ri   current_dirr-   re   s       r   r.   r.      s    ......'//"'//(";";<<K> 7==[*HIIK K 	"IIII "OO	 RW]]Y(899&; &;  !IIIr   c                 *   t           j                            d          rpt                      } | d uo| d         dk    }t	                      }|&|r|}n9t
          j                            |d          }nd }|st          j	        d           t          d                    |                     t
          j                            t                      ddd	          }t
          j                            |          r#t          d
                    |                     n$t          d                    |                     d }dt           j        k    r|t          d                    |                     t          j        |           t
          j                            |d          }t
          j                            |          r&t          d|            t          j        |           |8t          d                    |                     t          j        |           d S d S |et          d                    |                     t
          j                            dd          }|t
          j        z   |z   t
          j        d<   d S d S d S )Nr1   rG   rH   rM   zZCUDA path could not be detected. Set CUDA_PATH environment variable if CuPy fails to load.zCUDA_PATH: {}cupy.datalibzWheel shared libraries: {}z%Not wheel distribution ({} not found))      zAdding DLL search path: {}x64z&Adding DLL search path (for CUDA 13): zAdding to PATH: {}PATHr   )r   r;   rT   rN   r   r7   r=   r?   warningswarnr   formatget_cupy_install_pathrn   version_infoadd_dll_directoryr>   r8   r9   pathsep)rX   is_condarD   cuda_bin_pathwheel_libdircuda_bin_x64_pathr=   s          r   _setup_win32_dll_directoryr   
  s    |w'' 0F#%%$&KF;,?7,J "OO	  ? ) "Y > > M &%& & & 	_##I../// w||!##VWe= =7==&& 	 -44\BBCCCC8??    LS%%%(188GGHHH$]333$&GLL$F$F!7>>"344 < 0-0 0 1 1 1():;;;'188FFGGG$\22222 ('
 ')00>>???z~~fb11%1BJ%>%E
6"""a0F 0FZ ('r   c                     t           j                            t           j                            t           j                            t
                    d                    S )Nz..)r7   r=   rk   r?   rP   rl   r   r   r   r{   r{   @  s;    7??
RW__X..557 7 7r   c                     t           j                            dd          } | t           j                            d          S t           j                            |           S )az  Returns the directory where CUDA external libraries are installed.

    This environment variable only affects wheel installations.

    Shared libraries are looked up from
    `$CUPY_CUDA_LIB_PATH/$CUDA_VER/$LIB_NAME/$LIB_VER/{lib,lib64,bin}`,
    e.g., `~/.cupy/cuda_lib/11.2/nccl/2.8.0/lib64/libnccl.so.2.8.0`.

    The default $CUPY_CUDA_LIB_PATH is `~/.cupy/cuda_lib`.
    CUPY_CUDA_LIB_PATHNz~/.cupy/cuda_lib)r7   r8   r9   r=   
expanduserrk   )cupy_cuda_lib_paths    r   get_cupy_cuda_lib_pathr   F  sM     (<dCC!w!!"45557??-...r   dict[str, Any] | Nonec                 <    t           t          d          a t           S )Nz_wheel.json)_preload_config_get_json_datar   r   r   rN   rN   W  s    (77r   namec                   t           j                            t                      dd|           }t           j                            |          sd S t          |          5 }t          j        |          cd d d            S # 1 swxY w Y   d S )Nrq   rr   )r7   r=   r?   r{   r>   openjsonload)r   config_pathfs      r   r   r   ^  s    ',,$8 8K7>>+&& t	k		 ay||                 s   B  BBrs   boolc                   t                      }||d         dk    rt          d|  d           dS | t          vrt          d|            | |vrt          d|  d	           dS t          |          t          d
|             dS dS )z(Returns if the preload can be attempted.NrG   rH   zNot preloading z( as this is not a pip wheel installationFzUnknown preload library: zPreload z not configured in wheelzPreload already attempted: T)rN   r   _preload_libsAssertionError)rs   rX   s     r   _can_attempt_preloadr   g  s      !!FF;/7:: 	LsLLLMMMu
->>>???
&5555666uS%0300111u4r   c           
     D    t          d             t                     sdS i t           <   ddlm}m} 	  |           }|t                    d<   t            d|            dS # |$ r}t            d|            Y d}~nd}~ww xY wt                      d         }t          d	                    |                     t                      t          d
                                                   d                   d         }|D ]t          d  d d d            fddD             } dk    r(          d         }t          |d                   |z   }n- dk    r'          d         }t          |d                   |z   }|D ]}	t          j                            |	          s#t          d                    |	                     D	 t          d|	            t          j        |	          t                    |	<   t          d            n# t           $ rM}t#          |          j        }
d|	 d|
 d| d}t          |           t'          j        |           Y d}~d}~ww xY wt          d                                         t          d d           	 t          j                  t                    <   t          d           # t           $ r }t          d  d|            Y d}~d}~ww xY wdS )zPreload dependent shared libraries.

    The preload configuration file (cupy/.data/_wheel.json) will be added
    during the wheel build process.
    z"Preloading triggered for library: Nr   rI   
pathfinderz is loaded by cuda-pathfinder: z) could not be loaded by cuda-pathfinder: cudaz$CuPy wheel package built for CUDA {}zCuPy CUDA library directory: {}version	filenameszLooking for z	 version  ()c           
     d    g | ],}t           j                            d          |          -S )r   )r7   r=   r?   ).0xrX   r   filenamers   r   s     r   
<listcomp>z$_preload_library.<locals>.<listcomp>  sM     . . .  GLL"F6NC! . . .r   )rs   lib64rM   r   min_pypi_versionr   z"Rejected candidate (not found): {}zTrying to load Loadedz CuPy failed to preload library (z): zFile {} could not be foundz from default search pathzLibrary z could not be preloaded: )r   r   r   rO   rJ   rK   rN   rz   r   _get_cutensor_from_wheel_get_nccl_from_wheelr7   r=   r>   ctypesCDLL	Exceptiontype__name__rx   ry   )rs   rJ   rK   	loaded_dlecuda_versionr   libpath_candsr   libpathe_typer   rX   r   r   r   s   `           @@@@r   _preload_libraryr     sR    		3c	3	3444$$ M#: : : : : : : :	++C00	 ,5c<(??I??@@@ # C C C 	AAaAABBBBBBBBC  !!F&>L	/	6	6|	D	DEEE/11	*	1	12D	E	EFFFSk)$GsK(I 4C 4C@C@@'@@X@@@AAA
. . . . . . . . -	. . .
 *%c{+=>()96&>JJ M F]]%c{+=>$%5vf~FF  % 	C 	CG7>>'** 9@@IIJJJ#0w00111.4k'.B.Bc"7+X # # #a)&w & && &!"& & &  S			c""""""""# -44X>>??? F8FFFGGGC/5{8/D/Dc"8,X C C C AAAaAABBBBBBBBC# A4C 4CsI   A- -B2BB)AH..
J8AJ  J>1K11
L;LLr   tuple[int, int, int]c                   t          j        d| d          }t          |d                   }t          |          dk    rt          |d                   nd}t          |          dk    rt          |d                   nd}|||fS )Nz[^\d]rt   )maxsplitr         )rU   splitintlen)r   partsmajorminorpatchs        r   _parse_versionr     sv    HXw333EaMME ZZ1__CaMMM!E ZZ1__CaMMM!E%r   package_prefixr   &importlib.metadata.Distribution | Nonec           	     :   |                     d          \  }}|  d| }	 t          j                            |          }n0# t          j        j        $ r t          |  d| d           Y dS w xY wt          |j                  }t          |          }|d         |d         k    o5|d         |d         k    p#|d         |d         k    o|d         |d         k    }	|	s!t          |  d| d	| d
|j                    dS t          |  d| d|j                    |S )z
    Returns the distribution of the given package name and version
    installed via pip (e.g., cutensor-cuXX).
    If the package is not found or incompatible, returns None.
    .z-cuz wheel package (z) not installedNr   r   r   z) incompatible: expected z, found z	) found: )r   	importlibmetadatadistributionPackageNotFoundErrorr   r   r   )
r   r   r   cuda_major_ver_pkgdistactualexpectedis_compatibles
             r   _find_compatible_wheelr     s    

3NA
0
0
0
0C!..s332   DDDDDEEEtt DL))Fg&&Hq	Xa[  	
1I# DAY(1+%B&)x{*B	    9 9 9 9 9 9*.,9 9 	: 	: 	:tN	H	HC	H	H$,	H	HIIIKs   A )A.-A.	list[str]c                ~   t          d| |          }|g S t          j        dk    rc|                    d|                     d          d                    |                    d|                     d          d                    g}n*|                    d          |                    d	          g}d
 |D             S )zx
    Returns the list of shared library path candidates for cuTENSOR
    installed via Pip (cutensor-cuXX package).
    r   Nr0   zcutensor/lib/libcutensor.so.r   r   zcutensor/lib/libcutensorMg.so.zcutensor\bin\cutensor.dllzcutensor\bin\cutensorMg.dllc                ,    g | ]}t          |          S r   r   r   rs   s     r   r   z,_get_cutensor_from_wheel.<locals>.<listcomp>      ,,,CHH,,,r   )r   r   r;   locate_filer   r   r   r   shared_libss       r   r   r   	  s    
 "*gt<<D|	
|wFw}}S/A/A!/DFF  Hs1C1CA1FHH 	
 :;;<==
 -,,,,,r   c                    t           j        dk    rg S t          d| |          }|g S |                    d|                     d          d                    g}d |D             S )zw
    Returns the list of shared library path candidates for NCCL
    installed via Pip (nvidia-nccl-cuXX package).
    r0   znvidia-ncclNznvidia/nccl/lib/libnccl.so.r   r   c                ,    g | ]}t          |          S r   r   r   s     r   r   z(_get_nccl_from_wheel.<locals>.<listcomp>1  r   r   )r   r;   r   r   r   r   s       r   r   r   "  s}    
 |w	!-$??D|	A'--*<*<Q*?AA	
 	
K
 -,,,,,r   c                J   t                      }|| |vrd S |d         dk    r|d         }|                    d          d         }| dk    r3|d         d         }t          |          d         }d| d	| d
|dz    d}nd| dk    r3|d         d         }t          |          d         }d| d	| d
|dz    d}n+t          d|            |d         dk    rd|  }nt          t	          j        d|  dt          |          j         dt          |           d| d	           d S )NrG   pipr   r   r   r   r   zpip install "cutensor-cuz>=z,<r   "r   zpip install "nvidia-nccl-cuzUnknown library: rH   zconda install -c conda-forge r   z' library could not be loaded.

Reason: r   z')

You can install the library by:
  $ )	rN   r   r   r   rx   ry   r   r   r   )rs   excrX   r   
cuda_majorr   r   cmds           r   _preload_warningr   4  s   !!F~F**ke##f~ZZ__Q'
*Z();<G"7++A.EPZPP7PPeAgPPPCCF]]Vn%78G"7++A.ES
SSgSSqSSSCC !:S!:!:;;;			'	'3c33M   
c	   #3xx  	       r   c                    g d} t          j        | t           j        t           j        d          }|j        dk    rt          d| d          t          j        d|j        t          j	                  }|t          d|  d	          |
                    d
                                          }t          d |D                       S )N)rd   z-xhipz-Ez-vz	/dev/nullT)stdoutr   textr   zSubprocess command 'z	' failed.zA#include <\.\.\.> search starts here:\n(.*?)\nEnd of search list.zECould not find any hipcc default include directories using command: 'zK'. Possible errors are changed hipcc output format, or hipcc was not found.r   c              3  f   K   | ],}|                                 |                                 V  -d S )N)strip)r   include_paths     r   	<genexpr>z*_get_hipcc_include_dirs.<locals>.<genexpr>l  sS        \-?-?-A-A     r   )
subprocessrunDEVNULLPIPE
returncodeRuntimeErrorrU   rV   r   Sgroup
splitlinestuple)r   procmatchesinclude_pathss       r   _get_hipcc_include_dirsr   T  s    
9
9
9C>#j&8!+t= = =D !A$AAABBBiL
 G << < <
 
 	
 MM!$$//11M  )     r   c                 T   d} g }| D ]Q}	 t           j                            |           |                    |           8# t           j        j        $ r Y Nw xY wdt          |          k     r<d                    t          |                    }t          j	        d| d           d S d S )N)rq   zcupy-cuda12xzcupy-cuda13xzcupy-rocm-7-0zcupy-rocm-7-1zcupy-cuda11xzcupy-cuda102zcupy-cuda110zcupy-cuda111zcupy-rocm-4-3zcupy-rocm-5-0zcupy-cuda112zcupy-cuda113zcupy-cuda114zcupy-cuda115zcupy-cuda116zcupy-cuda117zcupy-rocm-4-0zcupy-rocm-4-2zamd-cupyr   z, z
--------------------------------------------------------------------------------

  CuPy may not function correctly because multiple CuPy packages are installed
  in your environment:

    a/  

  Follow these steps to resolve this issue:

    1. For all packages listed above, run the following command to remove all
       existing CuPy installations:

         $ pip uninstall <package_name>

      If you previously installed CuPy via conda, also run the following:

         $ conda uninstall cupy

    2. Install the appropriate CuPy package.
       Refer to the Installation Guide for detailed instructions.

         https://docs.cupy.dev/en/stable/install.html

--------------------------------------------------------------------------------
)
r   r   r   appendr   r   r?   sortedrx   ry   )knowncupy_installedkcupy_packages_lists       r   _detect_duplicate_installationr  r  s    E< N  	++A...!!!$$$$!6 	 	 	D	 	3~!YYvn'='=>>     	 	 	 	 	 s   4?AAc                     d} t           j        dk    rG	 | t                      z  } n4# t          $ r'}| dt	          |          j         d| z  } Y d }~nd }~ww xY w| S )Na  Failed to import CuPy.

If you installed CuPy via wheels (cupy-cudaXXX or cupy-rocm-X-X), make sure that the package matches with the version of CUDA or ROCm installed.

On Linux, you may need to set LD_LIBRARY_PATH environment variable depending on how you installed CUDA/ROCm.
On Windows, try setting CUDA_PATH environment variable.

Check the Installation Guide for details:
  https://docs.cupy.dev/en/latest/install.htmlr1   z%

The cause could not be identified: : )r   r;   _diagnose_win32_dll_loadr   r   r   )r   r   s     r   _diagnose_import_errorr    s    	2C |w	+---CC 	 	 	+77#+ +'(+ +CCCCCC	 Js   & 
AAAc                    t          d          } | dS ddlm} t          j        d          }|j        |j        |j        g|j        _        |j        |j        _	        dddt                       dg}t          j        d          }| d	         D ]}	 t          j        |          }|                    |j        |t          |                     |                    d
| d|j                    a# t           $ r |                    d
| d           Y t"          $ r;}|                    d
| dt%          |          j         d| d           Y d }~d }~ww xY wd                    |          S )Nz_depends.jsonr   r   )wintypeskernel32zCUDA Path: zDLL dependencies:i   dependsz  z -> z -> not foundz -> error (r  r   r   )r   r   r	  r   HANDLELPWSTRDWORDGetModuleFileNameWargtypesrestyper   create_unicode_buffer_handler   r   valueFileNotFoundErrorr   r   r   r?   )r  r	  r
  linesfilepathr   dllr   s           r   r  r    s   _--Gr{:&&H(.,:H(*2.H' 	
'moo''	E +E22H	" I I	I+d##C''Xs8}}MMMLL8d88889999  	3 	3 	3LL1d11122222 	I 	I 	ILLGdGGtAww/?GG1GGGHHHHHHHH	I 99Us   AC//#E	E1EE)r   r   r   r   )r   r   )r   r   r   r   )rs   r   r   r   )r   r   r   r   )r   r   r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   )<__doc__
__future__r   r   	functoolsimportlib.metadatar   r   r7   os.pathr;   rU   r_   r   r   typingr   rx   r   r!   r%   r)   r-   r   r   r8   r9   r   r   r   r#   r'   r+   r/   rT   r:   r@   rE   r   r"   r&   r*   r.   r   r{   r   rN   r   r   r   r   r   r   r   r   cacher   r  r  r  r   r   r   <module>r      s4    # " " " " "           				   				      



        


	>   
 
13	7	73	>              ,))'22,))'22< < <.1 1 1hE E E(  $F F F  .3F 3F 3Fl7 7 7/ / /"         8ZC ZC ZCz      B- - - -2- - - -$  @   :E E EP   2     r   