o
    zi	                     @   sp   d dl Z d dlmZmZ d dlZd dlmZmZ d dlm	Z	 d dl
mZ d dlmZ ed ZG dd	 d	eZdS )
    N)AnyLiteral)get_argsoverride)_XLA_AVAILABLE)	Precision)Optimizable)z32-true16-true	bf16-truec                   @   sJ   e Zd ZdZdeddfddZedededefd	d
Z	edddZ
dS )XLAPrecisionzPlugin for training with XLA.

    Args:
        precision: Full precision (32-true) or half precision (16-true, bf16-true).

    Raises:
        ValueError:
            If unsupported ``precision`` is provided.

    	precisionreturnNc                 C   s   t sttt tt}||vrtd|d| d|| _|dkr-dtjd< t	j
| _d S |dkr<dtjd< t	j| _d S t	j| _d S )	Nz`precision=z8)` is not supported in XLA. `precision` must be one of: .r	   1XLA_USE_F16r
   XLA_USE_BF16)r   ModuleNotFoundErrorstrr   _PRECISION_INPUT
ValueErrorr   osenvirontorchfloat16_desired_dtypebfloat16float32)selfr   supported_precision r   Z/home/ubuntu/.local/lib/python3.10/site-packages/lightning_fabric/plugins/precision/xla.py__init__'   s"   

zXLAPrecision.__init__	optimizerkwargsc                 K   s"   dd l m  m} |j||ddS )Nr   T)optimizer_argsbarrier)torch_xla.core.xla_modelcore	xla_modeloptimizer_step)r   r"   r#   xmr   r   r    r)   ;   s   zXLAPrecision.optimizer_stepc                 C   s    t jdd  t jdd  d S )Nr   r   )r   r   pop)r   r   r   r    teardownF   s   zXLAPrecision.teardown)r   N)__name__
__module____qualname____doc__r   r!   r   r   r   r)   r,   r   r   r   r    r      s    
r   )r   typingr   r   r   typing_extensionsr   r   !lightning_fabric.accelerators.xlar   ,lightning_fabric.plugins.precision.precisionr    lightning_fabric.utilities.typesr   r   r   r   r   r   r    <module>   s   