
    wi                         d dl Z d dlmZ d dlmZmZmZmZ d dlZddl	m
Z
mZ ddlmZ ddlmZ dd	ZddZe G d de                      Z G d dee
          ZdS )    N)	dataclass)ListOptionalTupleUnion   )ConfigMixinregister_to_config)
BaseOutput   )SchedulerMixinc                 F   ||j         n| j         }t          j        | |                              dd|                              | j                   }t          j        t          j        |                    d                                         d                     S )Ndevicer   r   	generator#B;)r   torch
zeros_likeuniform_tologclamp)tr   r   noises       v/root/.openclaw/workspace/chatterbox_venv_py311/lib/python3.11/site-packages/diffusers/schedulers/scheduling_amused.pygumbel_noiser      s    !*!6YAHFQv...771	7RRUUVWV^__EI	%++e"4"4555<<UCCDDDD          ?c                    t          j        |                    d                    |t          ||          z  z   }t          j        |d          j        }t          j        |d|                                           }||k     }|S )Nr   r   dimr   )r   r   r   r   sortvaluesgatherlong)mask_lenprobstemperaturer   
confidencesorted_confidencecut_offmaskings           r   mask_by_random_topkr/      sx    5;;u--..|E]f?g?g?g1ggJ
:2666=l,aAAG7"GNr   c                   @    e Zd ZU dZej        ed<   dZej        ed<   dS )AmusedSchedulerOutputaq  
    Output class for the scheduler's `step` function output.

    Args:
        prev_sample (`torch.Tensor` of shape `(batch_size, num_channels, height, width)` for images):
            Computed sample `(x_{t-1})` of previous timestep. `prev_sample` should be used as next model input in the
            denoising loop.
        pred_original_sample (`torch.Tensor` of shape `(batch_size, num_channels, height, width)` for images):
            The predicted denoised sample `(x_{0})` based on the model output from the current timestep.
            `pred_original_sample` can be used to preview progress or for guidance.
    prev_sampleNpred_original_sample)__name__
__module____qualname____doc__r   Tensor__annotations__r3    r   r   r1   r1      s?         
 
 )-%,-----r   r1   c                   &   e Zd ZU dZej        ed<   e	 ddede	fd            Z
	 	 dd	ed
eeeeef         ee         f         dee	ej        f         fdZ	 	 	 ddej        dej        dej        dedeej                 dedeeef         fdZddZdS )AmusedSchedulerr   temperaturescosinemask_token_idmasking_schedulec                 "    d | _         d | _        d S N)r=   	timesteps)selfr?   r@   s      r   __init__zAmusedScheduler.__init__1   s     !r   r   r   Nnum_inference_stepsr*   r   c                 *   t          j        ||                              d          | _        t	          |t
          t          f          r+t          j        |d         |d         ||          | _        d S t          j        |d||          | _        d S )Nr   r   r   g{Gz?)	r   arangefliprC   
isinstancetuplelistlinspacer=   )rD   rG   r*   r   s       r   set_timestepszAmusedScheduler.set_timesteps:   s     &9&IIINNqQQkE4=11 	f %{1~{1~Obkq r r rD %{DBU^d e e eDr   Tmodel_outputtimestepsamplestarting_mask_ratior   return_dictreturnc                    |j         dk    o
|j         dk    }|rT|j        \  }}	}
}|                    ||
|z            }|                    ||	|
|z                                ddd          }|| j        j        k    }|                    d          }|j        }||                    |j                  n|}|j        j	        dk    r)|j
        t          j        k    r|                                }|                    d|                    d                    }t          j        |d|	                              |
          } |d d df         j        |j        d d          }t          j        |||          }|dk    r|}n|j        d         }| j        |k                                    }|dz   t)          | j                  z  }| j        j        dk    r%t          j        |t.          j        z  dz            }n2| j        j        dk    rd|z
  }nt3          d| j        j                   ||z  }||z                                  }t          j        |                    dd          dz
  |          }t          j        t          j        dg|j        
          |          }t          j        |d|d d d d d f                   d d d d df         }t          j        ||t          j         |j
                  j                  }tC          ||| j"        |         |          }t          j        || j        j        |          }|r.|                    ||
|          }|                    ||
|          }|s||fS tG          ||          S )N      r   r   r   r!   r"   cpur   r   r>   linearunknown masking schedule T)r#   keepdim)$ndimshapereshapepermuteconfigr?   softmaxr   r   typedtyper   float32floatsizemultinomialviewwhererC   nonzerolenr@   cosmathpi
ValueErrorfloorminsummaxtensorr&   finfor/   r=   r1   )rD   rP   rQ   rR   rS   r   rT   two_dim_input
batch_sizecodebook_sizeheightwidthunknown_mapr)   r   probs_r3   r2   seq_lenstep_idxratio
mask_ratior(   selected_probsr.   s                            r   stepzAmusedScheduler.stepG   s    q(C\->!-C 	l7C7I4Jvu^^J??F'//
M6TY>ZZbbcdfgijkkL 99$$$,,/8/D)*+++%=&&6<5=+H+H\\^^FEJJrNN33$0iPPPSS[aSbb>3AAAqD9>CRC@PQ${;8LfUUq==.KKl1oG(2;;==H\S%8%88E{+x77"Yutw':;;

-99Y

 ![T[=Y![![\\\,z9J*,3355HyR!F!F!JHUUHyqc,:M!N!N!NPXYYH"\%5I!!!QQQPT*5UVVWXWXWXZ[Z[Z[]^W^_N"[nekR`RfFgFgFkllN)(NDDUV^D_ajkkG  +gt{/HJ^__K 	[%--j&%HHK#7#?#?
FTY#Z#Z  	7!566$[2FGGGr   c                    | j         |k                                    }|dz   t          | j                   z  }| j        j        dk    r%t          j        |t          j        z  dz            }n2| j        j        dk    rd|z
  }nt          d| j        j                   t          j
        |j        ||j        n|j        |                              |j                  |k     }|                                }| j        j        ||<   |S )Nr   r>   r   rZ   r[   )r   r   )rC   rk   rl   ra   r@   r   rm   rn   ro   rp   randr^   r   r   cloner?   )	rD   rR   rC   r   r   r   r   mask_indicesmasked_samples	            r   	add_noisezAmusedScheduler.add_noise   s   Ni/88::AT^!4!44;'833547?Q#677JJ[)X55UJJW9UWWXXX J9NY%5%5TZTamv  b 	 &*k&?l#r   )r>   )rF   N)r   NTrB   )r4   r5   r6   orderr   r8   r9   r
   intstrrE   r   r   r   r   rO   r'   
LongTensorr   	Generatorboolr1   r   r   r:   r   r   r<   r<   ,   s|        E, !)      ?E+/	f f f 3c3hc:;f c5<'(	f f f f$ $%/3 CH CHlCH *CH  	CH
 !CH EO,CH CH 
$e+	,CH CH CH CHJ     r   r<   rB   )r   N)rn   dataclassesr   typingr   r   r   r   r   configuration_utilsr	   r
   utilsr   scheduling_utilsr   r   r/   r1   r<   r:   r   r   <module>r      s+    ! ! ! ! ! ! / / / / / / / / / / / /  A A A A A A A A       , , , , , ,E E E E    . . . . .J . . ."v v v v vnk v v v v vr   