o
    ?߱i                     @   s4   d dl mZ d dlZG dd dZG dd dZdS )    )TupleNc                   @   sD   e Zd Zd
defddZdejdeejejejejf fddZd	S )
EDMScaling      ?
sigma_datac                 C   s
   || _ d S )N)r   )selfr    r   b/data/cameron/vidgen/cosmos-predict2.5/cosmos_predict2/_src/imaginaire/modules/denoiser_scaling.py__init__   s   
zEDMScaling.__init__sigmareturnc                 C   sn   | j d |d | j d   }|| j  |d | j d  d  }d|d | j d  d  }d|  }||||fS )N   r      g      ?)r   log)r   r
   c_skipc_outc_inc_noiser   r   r   __call__   s
    zEDMScaling.__call__N)r   )	__name__
__module____qualname__floatr	   torchTensorr   r   r   r   r   r   r      s    ,r   c                   @   sb   e Zd ZddededefddZdejd	ejfd
dZdejd	e	ejejejejf fddZ
dS )RectifiedFlowScaling      ?Tr   t_scaling_factorloss_weight_uniformc                 C   s   t |d dk sJ d|| _|| _|du r@d| _tdd| j}td|d	 d
  }||  }|| j|   }|| _	d S d S )Nr   gư>z/sigma_data must be 1.0 for RectifiedFlowScalingFi  r   r   r   r   )
absr   r   	num_stepsr   linspaceexpminsumweights)r   r   r   r   tyshiftr%   r   r   r   r	   "   s   
zRectifiedFlowScaling.__init__r
   r   c                 C   sh   | j rd| d |d  S ||d  }|| j   }t|d| jd }| j|j}|| 	|S )Nr   r   r   r   )
r   r    roundlongr   clampr%   todevicetype_as)r   r
   r&   indexZweights_on_devicer   r   r   sigma_loss_weights/   s   z'RectifiedFlowScaling.sigma_loss_weightsc                 C   s8   ||d  }d| }| }d| }|| j  }||||fS )Nr   r   )r   )r   r
   r&   r   r   r   r   r   r   r   r   :   s   
zRectifiedFlowScaling.__call__N)r   r   T)r   r   r   r   boolr	   r   r   r0   r   r   r   r   r   r   r   !   s    ,r   )typingr   r   r   r   r   r   r   r   <module>   s   