o
    ki                  	   @   s   d dl Z d dlZe jdefddZe jdefddZe jddeeeef deeeef fd	d
Ze jdefddZ	e jdefddZ
e jdefddZe jdefddZe jdefddZe jdefddZe jdefddZdS )    Nreturnc                  C   $   zddl } W dS  ty   Y dS w )zCheck if JAX is installed.r   NTF)jaxImportError)r    r   ]/var/www/addictedbytheproject.nl/epg/venv/lib/python3.10/site-packages/torch/utils/_pallas.pyhas_jax_package      r   c                  C   s2   t  sdS z	ddlm}  W dS  ty   Y dS w )z0Check if Pallas (JAX experimental) is available.Fr   )pallasT)r   jax.experimentalr
   r   )plr   r   r   has_pallas_package   s   r   r   r   r   fallbackc              
   C   sZ   zddl }|jd}dd |dd D \}}}|||fW S  tttfy,   |  Y S w )z/Get JAX version as (major, minor, patch) tuple.r   N.c                 s   s    | ]}t |V  qd S )N)int).0vr   r   r   	<genexpr>'   s    z"get_jax_version.<locals>.<genexpr>   )r   __version__splitr   
ValueErrorAttributeError)r   r   version_partsmajorminorpatchr   r   r   get_jax_version    s   r   c                  C   sp   t  sdS z(ddl} | d}t|dkrW dS tj r+tj \}}|dk r+W dS W dS  ty7   Y dS w )zJCheck if JAX has CUDA backend support with SM90+ (required by Mosaic GPU).Fr   Ngpu	   T)	r   r   deviceslentorchcudais_availableget_device_capability	Exception)r   r!   r   r   r   r   r   has_jax_cuda_backend-   s   

r(   c                  C   s@   t  sdS zddl} | d}t|dkW S  ty   Y dS w )z%Check if JAX has TPU backend support.Fr   Ntpu)r   r   r!   r"   r'   )r   r!   r   r   r   has_jax_tpu_backendE   s   
r*   c                  C   r   )z Check if torch_tpu is available.r   NTF)	torch_tpur   )r+   r   r   r   has_torch_tpuT   r	   r,   c                   C   s   t  S )z,Checks for a full Pallas-on-CPU environment.)r   r   r   r   r   has_cpu_pallas_   s   r-   c                   C   s   t  o
tj o
t S )z-Checks for a full Pallas-on-CUDA environment.)r   r#   r$   r%   r(   r   r   r   r   has_cuda_pallase   s   r.   c                   C   s   t  ot S )z,Checks for a full Pallas-on-TPU environment.)r   r,   r   r   r   r   has_tpu_pallask   s   r/   c                   C   s   t  pt pt S )z
    Check if Pallas backend is fully available for use.

    Requirements:
    - JAX package installed
    - Pallas (jax.experimental.pallas) available
    - A compatible backend (CUDA or TPU) is available in both PyTorch and JAX.
    )r-   r.   r/   r   r   r   r   
has_pallasq   s   
r0   )r   )	functoolsr#   cacheboolr   r   tupler   r   r(   r*   r,   r-   r.   r/   r0   r   r   r   r   <module>   s,    
*
