a
    d                     @   s   d dl mZmZmZmZ d dlmZ d dlmZ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 d d
lmZ d dlmZ e Zed Zed Zeeef ZG dd deZdS )    )AnyCallablecastUnion)Tensor)LBFGS	Optimizer)get_argsLiteralN)Optimizable)PrecisionPlugin)GradClipAlgorithmTypeMisconfigurationException)is_overridden)WarningCache)       )3216c                   @   s~   e Zd ZdZed ddddZedeeddd	d
Ze	de
eg ef eedddZdejfeee
ef eddddZdS )IPUPrecisionPluginz~Precision plugin for IPU integration.

    Raises:
        ValueError:
            If the precision is neither 16 nor 32.
    )r   r   r   r   N)	precisionreturnc                 C   sB   t tt t }||vr.td|d| dttt|| _d S )Nz&`Trainer(accelerator='ipu', precision=z1)` is not supported. `precision` must be one of: .)r	   _PRECISION_INPUT_STR_PRECISION_INPUT_INT
ValueErrorr   strr   )selfr   Zsupported_precision r   p/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/pytorch_lightning/plugins/precision/ipu.py__init__+   s    zIPUPrecisionPlugin.__init__zpl.LightningModule)tensormodelargskwargsr   c                 O   s   t d|rtd d S )NbackwardzYou have overridden the `LightningModule.backward` hook but it will be ignored since IPUs handle the backward logic internally.)r   warning_cachewarn)r   r"   r#   r$   r%   r   r   r    r&   4   s    
zIPUPrecisionPlugin.backward)	optimizerr#   optimizer_idxclosurer%   r   c                 K   sL   t |trtd| d| }| ||| |du }|jrH|rHtd|S )z*IPUs handle the optimizer step internally.z;IPUs and the LBFGS optimizer are not compatible (optimizer z).NzSkipping backward by returning `None` from your `training_step` is not implemented for IPUs. Please, open an issue in `https://github.com/Lightning-AI/lightning/issues` requesting this feature.)
isinstancer   r   Z_after_closureZautomatic_optimization)r   r)   r#   r*   r+   r%   Zclosure_resultZskipped_backwardr   r   r    optimizer_stepA   s    	


z!IPUPrecisionPlugin.optimizer_stepg        )r)   clip_valgradient_clip_algorithmr   c                 C   s   |dkrd S t dd S )Nr   z1IPUs currently do not support clipping gradients.r   )r   r)   r.   r/   r   r   r    clip_gradients[   s    z!IPUPrecisionPlugin.clip_gradients)__name__
__module____qualname____doc__r
   r!   r   r   r&   r   intr   r-   r   ZNORMr   r   floatr0   r   r   r   r    r   #   s.   

r   ) typingr   r   r   r   Ztorchr   Ztorch.optimr   r   Ztyping_extensionsr	   r
   Zpytorch_lightningplZ lightning_fabric.utilities.typesr   Z4pytorch_lightning.plugins.precision.precision_pluginr   Zpytorch_lightning.utilitiesr   Z&pytorch_lightning.utilities.exceptionsr   Z)pytorch_lightning.utilities.model_helpersr   Z%pytorch_lightning.utilities.rank_zeror   r'   r   r   Z_PRECISION_INPUTr   r   r   r   r    <module>   s   