o
    i{
                  	   @   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dS )    Nreturnc                  C   s$   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   U/sda-disk/www/egybert/egybert_env/lib/python3.10/site-packages/torch/utils/_pallas.pyhas_jax_package   s   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   @   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 CUDA backend support.Fr   Ngpur   r   deviceslen	Exceptionr   r    r   r   r   has_jax_cuda_backend-      
r$   c                  C   r   )z%Check if JAX has TPU backend support.Fr   Ntpur   r#   r   r   r   has_jax_tpu_backend<   r%   r'   c                   C   s   t  S )z,Checks for a full Pallas-on-CPU environment.)r   r   r   r   r   has_cpu_pallasK   s   r(   c                   C   s   t  o
tj o
t S )z-Checks for a full Pallas-on-CUDA environment.)r   torchcudais_availabler$   r   r   r   r   has_cuda_pallasQ   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_pallasW   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_pallas]   s   
r.   )r   )	functoolsr)   cacheboolr   r   tupler   r   r$   r'   r(   r,   r-   r.   r   r   r   r   <module>   s(    
*