
      i1	                         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 d dlmZ d d	lmZmZ  G d
 de      Zy)    )AbstractContextManager)AnyLiteralN)apply_to_collection)Tensor)Module)override)	Precision)_convert_fp_tensor_DtypeContextManagerc                       e Zd ZU dZdZed   ed<   dded   ddfdZede	de	fd	       Z
edefd
       Zedefd       Zedefd       Zededefd       Zededefd       Zy)HalfPrecisionzPlugin for training with half precision.

    Args:
        precision: Whether to use ``torch.float16`` (``'16-true'``) or ``torch.bfloat16`` (``'bf16-true'``).

    16-true)	bf16-truer   	precisionreturnNc                 r    || _         |dk(  rt        j                  | _        y t        j                  | _        y )Nr   )r   torchbfloat16float16_desired_input_dtype)selfr   s     |/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/lightning/fabric/plugins/precision/half.py__init__zHalfPrecision.__init__%   s*    "6?;6NENN!TYTaTa!    modulec                 :    |j                  | j                        S )N)dtype)tor   )r   r   s     r   convert_modulezHalfPrecision.convert_module)   s    yyt88y99r   c                 ,    t        | j                        S N)r   r   r   s    r   tensor_init_contextz!HalfPrecision.tensor_init_context-   s    #D$=$=>>r   c                 "    | j                         S r"   r$   r#   s    r   module_init_contextz!HalfPrecision.module_init_context1       ''))r   c                 "    | j                         S r"   r&   r#   s    r   forward_contextzHalfPrecision.forward_context5   r(   r   datac                 D    t        |t        t        | j                        S N)functionr   dst_type)r   r   r   r   r   r+   s     r   convert_inputzHalfPrecision.convert_input9   s    "42DF]a]v]vwwr   c                 T    t        |t        t        t        j                               S r-   )r   r   r   r   get_default_dtyper0   s     r   convert_outputzHalfPrecision.convert_output=   s    "42DF]b]t]t]vwwr   )r   )__name__
__module____qualname____doc__r   r   __annotations__r   r	   r   r    r   r$   r'   r*   r   r1   r4    r   r   r   r      s     2;Iw-.:b'*@"A bRV b :V : : : ?%; ? ? *%; * * *!7 * * x# x# x x x3 x3 x xr   r   )
contextlibr   typingr   r   r   #lightning_utilities.core.apply_funcr   r   torch.nnr   typing_extensionsr	   ,lightning.fabric.plugins.precision.precisionr
   (lightning.fabric.plugins.precision.utilsr   r   r   r:   r   r   <module>rB      s0    .   C   & B ]$xI $xr   