a
    d                     @  s   d Z ddl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 ddlmZ G d	d
 d
eZG dd de
edZG dd de
edZG dd de
ZG dd de
ZG dd de
ZdS )zEnumerated utilities.    )annotationsN)EnumEnumMeta)Any)LightningEnum)MisconfigurationException)rank_zero_deprecationc                      sR   e Zd ZdZddd fddZddd fddZdddd	 fd
dZ  ZS )_DeprecatedEnumMetazEnum that calls `deprecate()` whenever a member is accessed.

    Adapted from: https://stackoverflow.com/a/62309159/208880
    strr   )namereturnc                   s6   t  |}|dr |ds2t|tr2|  |S )N__)super__getattribute__
startswithendswith
isinstancer   	deprecate)clsr   obj	__class__ j/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/pytorch_lightning/utilities/enums.pyr       s    z$_DeprecatedEnumMeta.__getattribute__c                   s   t  |}|  |S N)r   __getitem__r   )r   r   memberr   r   r   r   '   s    z_DeprecatedEnumMeta.__getitem__)argskwargsr   c                   s(   t  j|i |}t|tr$|  |S r   )r   __call__r   r   r   )r   r   r   r   r   r   r   r   ,   s    
z_DeprecatedEnumMeta.__call__)__name__
__module____qualname____doc__r   r   r   __classcell__r   r   r   r   r	      s   r	   c                   @  sX   e Zd ZdZdZdZdZdZdZe	ddd	d
dZ
e	ddddZddddZdS )PrecisionTypezType of precision used.Z16Z32Z64Zbf16mixedz	str | intbool)	precisionr   c                   s   t  fddtD S )Nc                 3  s   | ]}| kV  qd S r   r   .0xr(   r   r   	<genexpr>>       z/PrecisionType.supported_type.<locals>.<genexpr>)anyr%   r,   r   r,   r   supported_type<   s    zPrecisionType.supported_type	list[str]r   c                   C  s   dd t D S )Nc                 S  s   g | ]
}|j qS r   valuer)   r   r   r   
<listcomp>B   r.   z1PrecisionType.supported_types.<locals>.<listcomp>)r%   r   r   r   r   supported_types@   s    zPrecisionType.supported_typesNonec                 C  s"   t dt| j d| jd d S NzThe `zZ` enum has been deprecated in v1.9.0 and will be removed in v2.0.0. Use the string value `z
` instead.r   typer    r4   selfr   r   r   r   D   s
    zPrecisionType.deprecateN)r    r!   r"   r#   ZHALFFLOATZFULLZBFLOATZMIXEDstaticmethodr0   r6   r   r   r   r   r   r%   3   s   r%   )	metaclassc                   @  s&   e Zd ZdZdZdZddddZdS )	AMPTypez4Type of Automatic Mixed Precision used for training.ZapexZnativer7   r2   c                 C  s"   t dt| j d| jd d S r8   r9   r;   r   r   r   r   Q   s
    zAMPType.deprecateN)r    r!   r"   r#   ZAPEXZNATIVEr   r   r   r   r   r@   K   s   r@   c                   @  s>   e Zd ZdZdZdZedddddZed	d
ddZdS )GradClipAlgorithmTypea  Define gradient_clip_algorithm types - training-tricks.
    NORM type means "clipping gradients by norm". This computed over all model parameters together.
    VALUE type means "clipping gradients by value". This will clip the gradient value for each parameter.

    References:
        clip_by_norm: https://pytorch.org/docs/stable/nn.html#torch.nn.utils.clip_grad_norm_
        clip_by_value: https://pytorch.org/docs/stable/nn.html#torch.nn.utils.clip_grad_value_
    r4   Znormr
   r'   )valr   c                   s   t  fddtD S )Nc                 3  s   | ]}|j  kV  qd S r   r3   r)   rB   r   r   r-   g   r.   z7GradClipAlgorithmType.supported_type.<locals>.<genexpr>)r/   rA   rC   r   rC   r   r0   e   s    z$GradClipAlgorithmType.supported_typer1   r2   c                   C  s   dd t D S )Nc                 S  s   g | ]
}|j qS r   r3   r)   r   r   r   r5   k   r.   z9GradClipAlgorithmType.supported_types.<locals>.<listcomp>)rA   r   r   r   r   r6   i   s    z%GradClipAlgorithmType.supported_typesN)	r    r!   r"   r#   ZVALUEZNORMr>   r0   r6   r   r   r   r   rA   X   s   	rA   c                   @  s   e Zd ZdZdZdS )AutoRestartBatchKeysz[Defines special dictionary keys used to track captured dataset state with multiple workers.Z__pl_restart_metaN)r    r!   r"   r#   ZPL_RESTART_METAr   r   r   r   rD   n   s   rD   c                   @  s`   e Zd ZdZdZdZeddddZedddd	Zeddd
dZ	e
d dddZdS )_FaultTolerantModedisabled	automaticmanualr'   r2   c                 C  s
   | t juS r   )rE   DISABLEDr;   r   r   r   
is_enabledz   s    z_FaultTolerantMode.is_enabledc                 C  s
   | t ju S r   )rE   	AUTOMATICr;   r   r   r   is_automatic~   s    z_FaultTolerantMode.is_automaticc                 C  s
   | t ju S r   )rE   MANUALr;   r   r   r   	is_manual   s    z_FaultTolerantMode.is_manualc                 C  sF   t dd }|dv rtjS |dv r,tjS |dv r:tjS tddS )zeThis classmethod detects if `Fault Tolerant` is activated and maps its value to `_FaultTolerantMode`.ZPL_FAULT_TOLERANT_TRAINING0)rO   rF   )1rG   )2rH   zhThe environment flag `PL_FAULT_TOLERANT_TRAINING` should be either 'disabled', 'automatic', or 'manual'.N)osgetenvlowerrE   rI   rK   rM   r   )r   Z	env_valuer   r   r   detect_current_mode   s    z&_FaultTolerantMode.detect_current_modeN)r    r!   r"   rI   rK   rM   propertyrJ   rL   rN   classmethodrU   r   r   r   r   rE   t   s   rE   )r#   
__future__r   rR   enumr   r   typingr   Z lightning_fabric.utilities.enumsr   Z&pytorch_lightning.utilities.exceptionsr   Z%pytorch_lightning.utilities.rank_zeror   r	   r%   r@   rA   rD   rE   r   r   r   r   <module>   s   