o
    zi	                     @   sl   d dl mZmZmZmZ d dlZd dlmZ dedeeejf defddZ	G d	d
 d
Z
G dd dZdS )    )AnyMappingTypeUnionN)Tensortensordst_typereturnc                 C   s   t | r
| |S | S N)torchis_floating_pointto)r   r    r   \/home/ubuntu/.local/lib/python3.10/site-packages/lightning_fabric/plugins/precision/utils.py_convert_fp_tensor   s   r   c                   @   sH   e Zd ZdZdejddfddZdddZd	ed
ededdfddZ	dS )_DtypeContextManagerz}A context manager to change the default tensor type when tensors get created.

    See: :func:`torch.set_default_dtype`

    dtyper	   Nc                 C   s   t  | _|| _d S r
   )r   get_default_dtype_previous_dtype
_new_dtype)selfr   r   r   r   __init__    s   

z_DtypeContextManager.__init__c                 C      t | j d S r
   )r   set_default_dtyper   )r   r   r   r   	__enter__$      z_DtypeContextManager.__enter__exc_type	exc_value	tracebackc                 C   r   r
   )r   r   r   )r   r   r   r   r   r   r   __exit__'   r   z_DtypeContextManager.__exit__r	   N)
__name__
__module____qualname____doc__r   r   r   r   r   r   r   r   r   r   r      s
    
r   c                   @   sN   e Zd ZdZdeeef ddfddZdddZd	e	d
e	de	ddfddZ
dS )_ClassReplacementContextManagerz)A context manager to monkeypatch classes.mappingr	   Nc                 C   sX   || _ i | _i | _|D ]}|dd\}}t||gd}|| j|< t||| j|< qd S )N.   )fromlist)_mapping
_originals_modulesrsplit
__import__getattr)r   r&   class_stringmodule_name
class_namemoduler   r   r   r   .   s   
z(_ClassReplacementContextManager.__init__c                 C   s:   | j  D ]\}}|dd\}}t| j| || qd S Nr'   r(   )r*   itemsr-   setattrr,   )r   r0   replacement_r2   r   r   r   r   8   s   z)_ClassReplacementContextManager.__enter__r   r   r   c                 C   s@   | j  D ]\}}|dd\}}t| j| || j|  qd S r4   )r*   r5   r-   r6   r,   r+   )r   r   r   r   r0   r7   r8   r2   r   r   r   r   =   s   z(_ClassReplacementContextManager.__exit__r    )r!   r"   r#   r$   r   strr   r   r   r   r   r   r   r   r   r%   +   s
    

r%   )typingr   r   r   r   r   r   r9   r   r   r   r%   r   r   r   r   <module>   s    