o
    ?߱i<
                     @   s   d dl mZmZ d dlmZ d dlZd dlmZ eded fddZeded fd	d
Z	edde
ded fddZeded fddZdS )    )	ExitStackcontextmanager)	GeneratorN)timerreturn)NNNc                  c   s    t jjjj} z6dt jjj_t jjjddddd dV  W d   n1 s'w   Y  W | t jjj_dS W | t jjj_dS | t jjj_w )ah  Context manager to temporarily disable TF32 for CUDA matrix multiplications.

    This is useful for ensuring full FP32 precision in numerical computations,
    particularly when debugging or comparing results between different implementations.

    Example:
        with disable_tf32():
            result = torch.matmul(a, b)  # Uses full FP32 precision
    FN)enabled	benchmarkdeterministic
allow_tf32)torchbackendscudamatmulr
   cudnnflags)Zold_allow_tf32_matmul r   `/data/cameron/vidgen/cosmos-predict2.5/cosmos_predict2/_src/imaginaire/utils/context_managers.pydisable_tf32   s   r   c                  #   L    t dg} t   fdd| D V  W d   dS 1 sw   Y  dS )zo
    Wrap the data loader initialization with multiple context managers used for telemetry and one logger.
    Zinit_data_loaderc                       g | ]}  |qS r   enter_context.0cmstackr   r   
<listcomp>5       z$data_loader_init.<locals>.<listcomp>Nr   r   contextsr   r   r   data_loader_init,      "r"   Fset_barrierc                 #   sL    t dg}t   fdd|D V  W d   dS 1 sw   Y  dS )zo
    Wrap the instantiation of the model with multiple context managers used for telemetry and one logger.
    Z
init_modelc                    r   r   r   r   r   r   r   r   A   r   zmodel_init.<locals>.<listcomp>Nr   )r$   r!   r   r   r   
model_init8   r#   r%   c                  #   r   )zL
    Wrap the distributed initialization, used for telemetry and timers
    init_distributedc                    r   r   r   r   r   r   r   r   M   r   z$distributed_init.<locals>.<listcomp>Nr   r    r   r   r   distributed_initD   r#   r'   )F)
contextlibr   r   typingr   r   *cosmos_predict2._src.imaginaire.utils.miscr   r   r"   boolr%   r'   r   r   r   r   <module>   s   