a
    þdA
  ã                   @   sh   d dl mZ d dlmZmZ d dlZd dlmZ d dl	m
Z
 d dlmZ d dlmZ G dd	„ d	eƒZdS )
é    )Úpartial)ÚAnyÚCallableN)Ú_XLA_AVAILABLE)ÚOptimizable)ÚPrecisionPlugin)ÚMisconfigurationExceptionc                       sd   e Zd ZdZeeddœ‡ fdd„Zeeg ef edœdd„Zed	e	eg ef eed
œdd„Z
‡  ZS )ÚTPUPrecisionPluginz%Precision plugin for TPU integration.N)ÚargsÚkwargsÚreturnc                    s&   t sttt ƒƒ‚tƒ j|i |¤Ž d S )N)r   ÚModuleNotFoundErrorÚstrÚsuperÚ__init__)Úselfr
   r   ©Ú	__class__© úp/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/pytorch_lightning/plugins/precision/tpu.pyr      s    zTPUPrecisionPlugin.__init__)Ú	optimizerÚclosurer   c                 C   s&   dd l m  m} |ƒ }| |¡ |S )Nr   )Útorch_xla.core.xla_modelÚcoreÚ	xla_modelZreduce_gradients)r   r   r   ÚxmÚclosure_resultr   r   r   Ú_tpu_wrap_closure    s    
z$TPUPrecisionPlugin._tpu_wrap_closurezpl.LightningModule)r   ÚmodelÚoptimizer_idxr   r   r   c           	      K   sl   dd l m  m} t| j||ƒ}t| j||||ƒ}|jf d|i|¤Ž}| ¡  |d u }|jrh|rht	dƒ‚|S )Nr   r   zÁSkipping backward by returning `None` from your `training_step` is not implemented for TPUs. Please, open an issue in `https://github.com/Lightning-AI/lightning/issues` requesting this feature.)
r   r   r   r   r   Z_wrap_closureÚstepZ	mark_stepZautomatic_optimizationr   )	r   r   r   r   r   r   r   r   Zskipped_backwardr   r   r   Úoptimizer_step'   s    
ÿz!TPUPrecisionPlugin.optimizer_step)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   Úintr!   Ú__classcell__r   r   r   r   r	      s   	
ùr	   )Ú	functoolsr   Útypingr   r   Zpytorch_lightningÚplZ!lightning_fabric.accelerators.tpur   Z lightning_fabric.utilities.typesr   Z4pytorch_lightning.plugins.precision.precision_pluginr   Z&pytorch_lightning.utilities.exceptionsr   r	   r   r   r   r   Ú<module>   s   