o
    8wi	                     @   sp   d dl mZ d dl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 )    )Mapping)AnyUnionN)Tensortensordst_typereturnc                 C   s   t | r
| |S | S N)torchis_floating_pointto)r   r    r   e/home/ubuntu/sommelier/.venv/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   r/   replacement_r1   r   r   r   r   9   s   z)_ClassReplacementContextManager.__enter__r   r   r   c                 C   s@   | j  D ]\}}|dd\}}t| j| || j|  qd S r3   )r)   r4   r,   r5   r+   r*   )r   r   r   r   r/   r6   r7   r1   r   r   r   r   >   s   z(_ClassReplacementContextManager.__exit__r   )r    r!   r"   r#   r   strtyper   r   r   r   r   r   r   r   r$   ,   s
    

r$   )collections.abcr   typingr   r   r
   r   r8   r   r   r   r$   r   r   r   r   <module>   s    