a
    d                     @   s   d dl mZmZmZmZmZ d dlmZ d dl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 d dlmZ d dlmZ d dlmZ erd dlm  m Z! G dd deZ"dS )    )AnyCallableDictOptionalUnion)Module)	OptimizerN)CheckpointIO)_DEVICE)_HPU_AVAILABLE)HPUCheckpointIO)_WrappingCheckpointIO)PrecisionPlugin)SingleDeviceStrategy)MisconfigurationException)STEP_OUTPUTc                       s&  e Zd ZdZdZd&eed ee ee d fddZ	e
ed	d
dZejee ddddZe
ed	ddZddd fddZddd fddZdd	ddZdd	ddZd'eeeg ef eedef  eed fddZeeddd Zeedd!d"Zeedd#d$d%Z  Z S )(SingleHPUStrategyz+Strategy for training on single HPU device.Z
hpu_singlehpuNzpl.accelerators.Accelerator)deviceacceleratorcheckpoint_ioprecision_pluginc                    s$   t stdt j||||d d S )Nz/`SingleHPUStrategy` requires HPU devices to run)r   r   r   r   )r   r   super__init__)selfr   r   r   r   	__class__ p/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/pytorch_lightning/strategies/single_hpu.pyr   (   s    zSingleHPUStrategy.__init__)returnc                 C   s0   | j d u rt | _ nt| j tr*t | j _| j S N)_checkpoint_ior   
isinstancer   r   r   r   r   r   r   :   s
    


zSingleHPUStrategy.checkpoint_io)ior   c                 C   s
   || _ d S r    )r!   )r   r$   r   r   r   r   C   s    c                 C   s   dS )NFr   r#   r   r   r   is_distributedG   s    z SingleHPUStrategy.is_distributedz
pl.Trainer)trainerr   c                    s   |    t | d S r    )model_to_devicer   setupr   r&   r   r   r   r(   K   s    zSingleHPUStrategy.setupc                    s   t  | d S r    )r   setup_optimizersr)   r   r   r   r*   O   s    z"SingleHPUStrategy.setup_optimizersc                 C   s   | j | j d S r    )modeltoZroot_devicer#   r   r   r   r'   R   s    z!SingleHPUStrategy.model_to_devicec                 C   s   t   d S r    htcore	mark_stepr#   r   r   r   on_after_backwardU   s    z#SingleHPUStrategy.on_after_backwardzpl.LightningModule)	optimizeropt_idxclosurer+   kwargsr   c                    s&   t  j||||fi |}t  |S r    )r   optimizer_stepr.   r/   )r   r1   r2   r3   r+   r4   Zoptimizer_outputr   r   r   r5   Y   s    z SingleHPUStrategy.optimizer_step)step_outputr   c                 C   s   t   |S r    r-   r   r6   r   r   r   validation_step_endf   s    z%SingleHPUStrategy.validation_step_endc                 C   s   t   |S r    r-   r7   r   r   r   test_step_endk   s    zSingleHPUStrategy.test_step_end)strategy_registryr   c                 C   s   |j | j| | jj d d S )N)description)registerstrategy_namer   __name__)clsr:   r   r   r   register_strategiesp   s
    z%SingleHPUStrategy.register_strategies)r   NNN)N)!r>   
__module____qualname____doc__r=   r
   r   r	   r   r   propertyr   setterboolr%   r(   r*   r'   r0   r   intr   r   r   r   r5   r   r8   r9   classmethodr   r@   __classcell__r   r   r   r   r   #   sF       	 
r   )#typingr   r   r   r   r   Ztorch.nnr   Ztorch.optim.optimizerr   Zpytorch_lightningplZlightning_fabric.pluginsr	   Z lightning_fabric.utilities.typesr
   Z"pytorch_lightning.accelerators.hpur   Z'pytorch_lightning.plugins.io.hpu_pluginr   Z$pytorch_lightning.plugins.io.wrapperr   Z#pytorch_lightning.plugins.precisionr   Z*pytorch_lightning.strategies.single_devicer   Z&pytorch_lightning.utilities.exceptionsr   Z!pytorch_lightning.utilities.typesr   Zhabana_frameworks.torch.coreZtorchcorer.   r   r   r   r   r   <module>   s   