o
    m9:j                  	   @   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   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   Z/home/nk/hobo-godmode/plappi-mvp/.venv/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   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   s2   zddl } | j  W dS  ttfy   Y dS w )z.Check if torch_tpu is installed and available.r   NTF)torch_tpu.apiapi
tpu_devicer   RuntimeError)	torch_tpur   r   r   has_torch_tpuT   s   
r.   c                   C   s   t  S )z,Checks for a full Pallas-on-CPU environment.)r   r   r   r   r   has_cpu_pallasa   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_pallasg   s   r0   c                   C   s   t  ot ot S )z,Checks for a full Pallas-on-TPU environment.)r   r(   r.   r   r   r   r   has_tpu_pallasm   s   r1   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/   r0   r1   r   r   r   r   
has_pallass   s   
r2   )r   )	functoolsr!   cacheboolr   r   tupler   r   r&   r(   r.   r/   r0   r1   r2   r   r   r   r   <module>   s,    
*