
    +h                         S SK r S SKJr  S SKJrJrJrJr  S SKrSSK	J
r
Jr  SSKJr  SSKJr  SS	 jrSS
 jr\ " S S\5      5       r " S S\\
5      rg)    N)	dataclass)ListOptionalTupleUnion   )ConfigMixinregister_to_config)
BaseOutput   )SchedulerMixinc                 D   Ub  UR                   OU R                   n[        R                  " XS9R                  SSUS9R	                  U R                   5      n[        R
                  " [        R
                  " UR                  S5      5      * R                  S5      5      * $ )Ndevicer   r   	generator#B;)r   torch
zeros_likeuniform_tologclamp)tr   r   noises       `/home/james-whalen/.local/lib/python3.13/site-packages/diffusers/schedulers/scheduling_amused.pygumbel_noiser      s~    !*!6YAHHFQ.771	7RUUVWV^V^_EII		%++e"455<<UCDDD    c                     [         R                  " UR                  S5      5      U[        XS9-  -   n[         R                  " USS9R
                  n[         R                  " USU R                  5       5      nXF:  nU$ )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.      se    5;;u-.|E?g1ggJ

:26==ll,aAG"GNr   c                   Z    \ rS rSr% Sr\R                  \S'   Sr\R                  \S'   Sr	g)AmusedSchedulerOutput   aM  
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____firstlineno____doc__r   Tensor__annotations__r3   __static_attributes__r4   r   r   r0   r0      s"    
 )-%,,-r   r0   c                   L   \ rS rSr% Sr\R                  \S'   \ SS\	S\
4S jj5       r  SS\	S	\\	\\	\	4   \\	   4   S
\\
\R                  4   4S jjr   SS\R                  S\R"                  S\R$                  S\	S\\R(                     S\S\\\4   4S jjrSS jrSrg)AmusedScheduler,   r   temperaturesmask_token_idmasking_schedulec                      S U l         S U l        g Nr@   	timesteps)selfrA   rB   s      r   __init__AmusedScheduler.__init__1   s     !r   Nnum_inference_stepsr)   r   c                    [         R                  " XS9R                  S5      U l        [	        U[
        [        45      (       a"  [         R                  " US   US   XS9U l        g [         R                  " USXS9U l        g )Nr   r   r   g{Gz?)	r   arangefliprF   
isinstancetuplelistlinspacer@   )rG   rJ   r)   r   s       r   set_timestepsAmusedScheduler.set_timesteps:   se     &9INNqQkE4=11 %{1~{1~Ob rD %{DBU eDr   model_outputtimestepsamplestarting_mask_ratior   return_dictreturnc                    UR                   S:H  =(       a    UR                   S:H  nU(       aH  UR                  u  ppUR                  XU-  5      nUR                  XX-  5      R                  SSS5      nX0R                  R
                  :H  nUR                  SS9nUR                  nUb  UR                  UR                  5      OUnUR                  R                  S:X  a.  UR                  [        R                  :w  a  UR                  5       nUR                  SUR                  S5      5      n[        R                  " USUS	9R                  US
9nUS S 2S4   R                   " UR                  S S 6 n[        R"                  " UUU5      nUS:X  a  UnGOUR                  S   nU R$                  U:H  R'                  5       nUS-   [)        U R$                  5      -  nU R                  R*                  S:X  a+  [        R,                  " U[.        R0                  -  S-  5      nOBU R                  R*                  S:X  a  SU-
  nO"[3        SU R                  R*                   35      eUU-  nUU-  R5                  5       n[        R6                  " UR9                  SSS9S-
  U5      n[        R:                  " [        R<                  " S/UR                  S
9U5      n[        R>                  " USUS S 2S S 2S 4   5      S S 2S S 2S4   n[        R"                  " UU[        R@                  " UR                  5      R:                  5      n[C        UUU RD                  U   U5      n[        R"                  " UU R                  R
                  U5      nU(       a%  UR                  WW
W5      nUR                  XU5      nU(       d  UU4$ [G        UU5      $ )N      r   r   r   r    r!   cpur   r   cosinelinearunknown masking schedule T)r"   keepdim)$ndimshapereshapepermuteconfigrA   softmaxr   r   typedtyper   float32floatsizemultinomialviewwhererF   nonzerolenrB   cosmathpi
ValueErrorfloorminsummaxtensorr%   finfor.   r@   r0   )rG   rT   rU   rV   rW   r   rX   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   stepAmusedScheduler.stepG   sA    q(C\->->!-C7C7I7I4Jv^^J?F'//
6>ZbbcdfgijkL 9 99$$$,/8/D)**+%==&6<<5==+H\\^FEJJrN3$00iPSS[aSb3AqD9>>CR@PQ${{;8LfUq=.Kll1oG(2;;=H\S%88E{{++x7"YYutww':;
--9Y
 #<T[[=Y=Y<Z![\\,z9J*,335HyyR!F!JHUHyyqc,:M:M!NPXYH"\\%5I!QPT*5UVWXZ[]^W^_N"[[nekkR`RfRfFgFkFklN)(NDDUDUV^D_ajkG  ++gt{{/H/HJ^_K%--j&%HK#7#?#?
TY#Z !566$[2FGGr   c                 ~   U R                   U:H  R                  5       nUS-   [        U R                   5      -  nU R                  R                  S:X  a+  [
        R                  " U[        R                  -  S-  5      nOBU R                  R                  S:X  a  SU-
  nO"[        SU R                  R                   35      e[
        R                  " UR                  Ub  UR                  OUR                  US9R                  UR                  5      U:  nUR                  5       nU R                  R                  X'   U$ )Nr   r^   r   r_   r`   )r   r   )rF   rp   rq   rf   rB   r   rr   rs   rt   ru   randrc   r   r   clonerA   )	rG   rV   rF   r   r   r   r   mask_indicesmasked_samples	            r   	add_noiseAmusedScheduler.add_noise   s   NNi/88:AT^^!44;;''835477?Q#67J[[))X5UJ89U9U8VWXX JJ9NY%5%5TZTaTamvb 	 &*kk&?&?#r   rE   )r^   ))r   r   N)r   NTrD   )r5   r6   r7   r8   orderr   r:   r;   r
   intstrrH   r   r   r   r   rR   r&   
LongTensorr   	Generatorboolr0   r   r   r<   r4   r   r   r>   r>   ,   s   E,, !)   ?E+/	f f 3c3hc:;f c5<<'(	f$ $%/3 CHllCH **CH   	CH
 !CH EOO,CH CH 
$e+	,CHJr   r>   rD   )g      ?N)rs   dataclassesr   typingr   r   r   r   r   configuration_utilsr	   r
   utilsr   scheduling_utilsr   r   r.   r0   r>   r4   r   r   <module>r      sS     ! / /  A  ,E .J . ."vnk vr   