
    3jH                        % S r SSKJr  SSKJr  SSKJrJr  SSKJ	r	J
r
JrJrJrJrJrJrJr  \\-  \\S4   -  S-  r\\S	'    " S
 S5      rS\S\S   4S jr " S S\5      r\\-  r\\S'   \\S4   \-  S-  r\\S'   \\-  \\S4   -  S-  r\\S'   S\\\S4   -  S\4S jrS\S\4S jrS\S\4S jrS-S\S\S\4S jjr S-S\S\S\4S jjr!S\S\S\4S jr"S.S\S\S\4S  jjr#S\S-  S\S-  4S! jr$S\S-  S\S-  4S" jr%S\S\S\4S# jr&S\S\S\4S$ jr'S%\S\S\S\4S& jr(S\S\S\4S' jr)S\S\S\4S( jr*S\S\S\4S) jr+S\S\S\4S* jr,S+\\S4   S\S\\\4   4S, jr-g)/z
Definition of CuTe Layouts and functions to manipulate them which works with the order
of lexicographic instead of co-lexicographic as implemented in the original layout.py
    )chain)	TypeAlias)SelfTypeIs   )	crd2idxflattenhas_noneIntTupleis_intis_tupleproductslice_suffix_product.NCoordinateTypec                       \ rS rSrSrg)
LayoutBase=    N)__name__
__module____qualname____firstlineno____static_attributes__r       Z/home/wildlama/miniconda3/lib/python3.13/site-packages/torch/distributed/_pycute/layout.pyr   r   =   s    r   r   xreturnLayoutc                 "    [        U [        5      $ N)
isinstancer   )r   s    r   	is_layoutr#   A   s    a$$r   c                       \ rS rSrSS\S\S-  SS4S jjrS\S\4S jrS\	4S	 jr
S
\S\\	-  4S jrS\	S\4S jrS\	4S jrS\	4S jrS\4S jrS\4S jrSrg)r   E   N_shape_strider   c                 X    Xl         Uc  [        U R                   5      U l        g X l        g r!   )shaper   stride)selfr&   r'   s      r   __init__Layout.__init__F   s!    
?(4DK!Kr   otherc                     [        U[        5      (       d  gU R                  UR                  :H  =(       a    U R                  UR                  :H  $ )NF)r"   r   r)   r*   )r+   r.   s     r   __eq__Layout.__eq__N   s7    %((zzU[[(HT[[ELL-HHr   c                 b    [        U R                  5      (       a  [        U R                  5      $ gNr   )r   r)   lenr+   s    r   __len__Layout.__len__T   s"    DJJtzz?"r   argsc                    [        U5      (       a{  [        U5      S:X  a:  [        [        US   U R                  5      [        US   U R
                  5      5      $ [        [        XR                  5      [        XR
                  5      5      $ [        U5      S:X  a$  [        US   U R                  U R
                  5      $ [        XR                  U R
                  5      $ )z
Map a logical coordinate to a linear index (Coord has no Underscore slice operators)
OR
Slice the layout and return the sublayout (Coord has an Underscore slice op)

Follow the same behavior of `Layout::operator(Coord const&)` in cute C++
r   r   )r
   r4   r   r   r)   r*   r   )r+   r8   s     r   __call__Layout.__call__[   s     D>>4yA~fT!Wdjj96$q'4;;;WXXfT::6t[[8QRR4yA~tAw

DKK@@tZZ==r   ic                     [        U R                  5      (       a&  [        U R                  U   U R                  U   5      $ US:w  a  [        e[        U R                  U R                  5      $ )Nr   )r   r)   r   r*   AssertionError)r+   r<   s     r   __getitem__Layout.__getitem__o   sP    DJJ$**Q-Q88Av$$$**dkk22r   c                 ,    [        U R                  5      $ r!   )r   r)   r5   s    r   sizeLayout.sizex   s    tzz""r   c                 :    U " U R                  5       S-
  5      S-   $ r3   )rB   r5   s    r   cosizeLayout.cosize|   s    DIIK!O$q((r   c                 8    U R                    SU R                   3$ )N:r)   r*   r5   s    r   __str__Layout.__str__   s    **Qt{{m,,r   c                 <    SU R                    SU R                   S3$ )NzLayout(,)rI   r5   s    r   __repr__Layout.__repr__   s    Adkk]!44r   rI   r!   )r   r   r   r   r   r,   objectboolr0   intr6   r   r   r:   r?   rB   rE   strrJ   rO   r   r   r   r   r   r   E   s    "x "(T/ "T "IF It I >n > >(3S 3T 3#c #) )- -5# 5r   LayoutOrIntTupleLayoutProfileLayoutInputlayoutsc                      [        U 5      S:X  a  [        U S   5      (       d  U S   n [        S U  5       6 u  p[        X5      $ )Nr   r   c              3   P   #    U  H  oR                   UR                  4v   M     g 7fr!   rI   ).0as     r   	<genexpr>make_layout.<locals>.<genexpr>   s     ?w!77AHH-ws   $&)r4   r#   zipr   )rX   r)   r*   s      r   make_layoutr`      sB    
7|q71:!6!6!*?w?@ME%  r   layoutc                 X    [        U 5      (       a  U R                  5       $ [        U 5      $ r!   )r#   rB   r   ra   s    r   rB   rB      s#    {{}6?r   c                 "    U R                  5       $ r!   )rE   rc   s    r   rE   rE      s    ==?r   profilec                 (  ^ ^ [        T5      (       av  [        T 5      [        T5      :  a  [        e[        [	        U U4S j[        [        T5      5       5       U 4S j[        [        T5      [        T 5      5       5       5      5      $ S/nS/n[        [        [        T R                  5      5      [        [        T R                  5      5      5       H^  u  pEUS:X  a  M  US   S:X  a
  XBS'   XSS'   M   US   US   -  U:X  a  US   U-  US'   M<  UR                  U5        UR                  U5        M`     [        U5      S:X  a  [        US   US   5      $ UR                  5         UR                  5         [        [        U5      [        U5      5      $ )Nc              3   H   >#    U  H  n[        TU   TU   5      v   M     g 7fr!   )coalescer[   r<   ra   re   s     r   r]   coalesce.<locals>.<genexpr>   s%     N:MQ&)WQZ00:M   "c              3   .   >#    U  H
  nTU   v   M     g 7fr!   r   r[   r<   ra   s     r   r]   rj           E$Dq$D   r   r   )r   r4   r>   r`   r   ranger_   reversedr	   r)   r*   appendr   reversetuplera   re   result_shaperesult_strider)   r*   s   ``    r   rh   rh      sk   v;W%  N%G:MNEE#g,F$DE
 	
 3LCM &''&--2H)I A:""$ &""b 11V;+B/%7L &  (!$ <Al1o}Q'788eL)5+?@@r   c                 x  ^ ^ [        T5      (       av  [        T 5      [        T5      :  a  [        e[        [	        U U4S j[        [        T5      5       5       U 4S j[        [        T5      [        T 5      5       5       5      5      $ / n/ n[        [        T R                  5      [        T R                  5      5       H7  u  pEUS:X  a  M  US:X  a  M  UR                  U5        UR                  U5        M9     [        U5      S:X  a  [        SS5      $ [        [        [        U5      [        U5      5      5      $ )Nc              3   H   >#    U  H  n[        TU   TU   5      v   M     g 7fr!   )filterri   s     r   r]   filter.<locals>.<genexpr>   s%     L8K1q	71:..8Krk   c              3   .   >#    U  H
  nTU   v   M     g 7fr!   r   rm   s     r   r]   r|      rn   ro   r   r   )r   r4   r>   r`   r   rq   r_   r	   r)   r*   rs   r   rh   ru   rv   s   ``    r   r{   r{      s    v;W%  Lc'l8KLEE#g,F$DE
 	
 LMWV\\2GFMM4JK
fk&  (	 L <Aa|u\2E-4HIJJr   layoutAlayoutBc                 (  ^ ^ Tc  T $ [        T5      (       a  [        T [        T5      5      $ [        T5      (       av  [	        T 5      [	        T5      :  a  [
        e[        [        U U4S j[        [	        T5      5       5       U 4S j[        [	        T5      [	        T 5      5       5       5      5      $ [        TR                  5      (       a  [        U 4S jT 5       5      $ TR                  S:X  a  [        TR                  S5      $ / n/ nTR                  nTR                  n[        T 5      n[        [        [        UR                  5      SS  5      [        [        UR                  5      SS  5      5       Hh  u  pxXu-  S:X  d  XW-  S:X  d  [
        e[        [!        SXu-  5      U5      n	U	S:w  a$  UR#                  U	5        UR#                  XX-  5        XI-  nU* U-  * nMj     US:w  d  [	        U5      S:X  a;  UR#                  U5        UR#                  U[        UR                  5      S   -  5        UR%                  5         UR%                  5         [	        U5      S:X  a  [        US   US   5      $ [        ['        U5      ['        U5      5      $ )Nc              3   H   >#    U  H  n[        TU   TU   5      v   M     g 7fr!   compositionr[   r<   r~   r   s     r   r]   composition.<locals>.<genexpr>   s%     R>QWQZ44>Qrk   c              3   .   >#    U  H
  nTU   v   M     g 7fr!   r   r[   r<   r~   s     r   r]   r           G%F%Fro   c              3   <   >#    U  H  n[        TU5      v   M     g 7fr!   r   )r[   	layoutB_ir~   s     r   r]   r      s     TGy;w	::Gs   r   r   )r   r   r   r   r4   r>   r`   r   rq   r)   r*   rh   r_   rr   r	   minmaxrs   rt   ru   )
r~   r   rw   rx   
rest_shaperest_strideflat_A
curr_shapecurr_stride	new_shapes
   ``        r   r   r      s:   	7F7O44	'		w<#g,&  ReCL>QRGU3w<W%FG
 	
 
'--	 	 TGTTT~~gmmQ'']]
nn'" (+WV\\*12./'&--:PQRQS:T1U(
#J ,1[5MQR5R$$C:#<=zJIA~##I.$$[%>?#0J
*K(
& ?c,/14
+  wv}}/Ea/H!HI 	|!,q/=+;<<%-u]/CDDr   max_idxc                 |   [        U 5      (       a  [        [        U 5      5      $ / n/ nSn[        [	        [        U R                  5      [        U R                  5      5      5      nU Ha  u  pgUS:X  d  US:X  a  M  XGU-  :*  n[        U5      [        L a  U(       d  [        eUR                  Xd-  5        UR                  U5        Xv-  nMc     UR                  X-   S-
  U-  5        UR                  U5        UR                  5         UR                  5         [        [        [        U5      [        U5      5      5      $ )Nr   r   )r   
complementr   sortedr_   r	   r*   r)   typerR   r>   rs   rt   rh   ru   )	ra   r   rw   rx   current_idx	sorted_DSr*   r)   in_bounds	            r   r   r   /  s   f~~&.))LMKs76==176<<3HIJI"Q;%1*&.0Nd"H  F12[)n # .2{BC% F5.m0DEFFr   c           	         U c  g [        U 5      (       a  [        U 5      $ / n/ nSn[        U R                  5      n[        U R                  5      n[        [        XT[        U5      5      5      nU H;  u  pxn	US:X  a  M  X7:w  a    O*UR                  U5        UR                  U	5        X-  nM=     UR                  5         UR                  5         [        [        [        U5      [        U5      5      5      $ r3   )r   r   r	   r)   r*   r   r_   r   rs   rt   rh   ru   )
ra   rw   rx   r   
flat_shapeflat_stride
sorted_DSAr*   r)   rstrides
             r   right_inverser   P  s    ~	f~LMK&J&--(KK^J5OPQJ",wA: E"W%n #- F5.m0DEFFr   c                 |    U c  g [        U 5      (       a  [        U 5      $ [        [        [	        U 5      U 5      5      $ r!   )r   r   r   r`   r   rc   s    r   left_inverser   m  s4    ~	f~Z%7@AAr   c                   ^ ^ Tc  T $ [        T5      (       a  [        T [        T5      5      $ [        T5      (       av  [	        T 5      [	        T5      :  a  [
        e[        [        U U4S j[        [	        T5      5       5       U 4S j[        [	        T5      [	        T 5      5       5       5      5      $ [        T [        T[        T[        T 5      5      5      5      $ )Nc              3   H   >#    U  H  n[        TU   TU   5      v   M     g 7fr!   )logical_divider   s     r   r]   !logical_divide.<locals>.<genexpr>  s*      0 #71:wqz::0rk   c              3   .   >#    U  H
  nTU   v   M     g 7fr!   r   r   s     r   r]   r     r   ro   )r   r   r   r   r4   r>   r`   r   rq   r   r   rB   r~   r   s   ``r   r   r   w  s    	gvg77	'		w<#g,&  "3w<0 HU3w<W%FG	
 		
 GZg?@ r   c                   ^ ^ Tc  T $ [        T5      (       a  [        T [        T5      5      $ [        T5      (       av  [	        T 5      [	        T5      :  a  [
        e[        [        U U4S j[        [	        T5      5       5       U 4S j[        [	        T5      [	        T 5      5       5       5      5      $ [        T [        [        T [        T 5      [        T5      -  5      T5      5      $ )Nc              3   H   >#    U  H  n[        TU   TU   5      v   M     g 7fr!   )logical_productr   s     r   r]   "logical_product.<locals>.<genexpr>  s*      0 $GAJ
;;0rk   c              3   .   >#    U  H
  nTU   v   M     g 7fr!   r   r   s     r   r]   r     r   ro   )r   r   r   r   r4   r>   r`   r   rq   r   r   rB   rE   r   s   ``r   r   r     s    	gvg77	'		w<#g,&  "3w<0 HU3w<W%FG	
 		
 JwWw(GH'R r   splitterc                   ^ ^^^ Tc  [        [        SS5      T5      $ [        T5      (       a  [        T5      [        T5      :  a  [        e[        UUU 4S j[        [        T5      5       5       5      m[        [        U4S j[        [        T5      5       5       5      [        [        U4S j[        [        T5      5       5       U4S j[        [        T5      [        T5      5       5       5      5      5      $ T " TT5      $ )Nr   r   c              3   J   >#    U  H  n[        TTU   TU   5      v   M     g 7fr!   )
hier_unzip)r[   r<   r~   r   r   s     r   r]   hier_unzip.<locals>.<genexpr>  s,      
( xWQZ88(s    #c              3   4   >#    U  H  nTU   S    v   M     g7f)r   Nr   r[   r<   splits     r   r]   r     s     A-@a-@   c              3   4   >#    U  H  nTU   S    v   M     g7f)r   Nr   r   s     r   r]   r     s     >*=QU1Xa[*=r   c              3   .   >#    U  H
  nTU   v   M     g 7fr!   r   r   s     r   r]   r     s     K)JAWQZ)Jro   )r`   r   r   r4   r>   rq   r   )r   r~   r   r   s   ```@r   r   r     s    
 6!Q<11	'		w<#g,&   
3w<(
 

 AU3w<-@AA>%G*=>Ks7|S\)JK
 	
 GW%%r   c                 "    [        [        X5      $ r!   )r   r   r   s     r   zipped_divider     s    ng77r   c           	          [        X5      n[        US   /[        [        US   5      5       Vs/ s H
  o2S   U   PM     sn-   5      $ s  snf Nr   r   )r   r`   rq   r4   r~   r   resultr<   s       r   tiled_divider     sI    7,Fq	{E#fQi.<Q%R<QqQil<Q%RRSS%R   A	
c                 "    [        [        X5      $ r!   )r   r   r   s     r   zipped_productr     s    ow88r   c           	          [        X5      n[        US   /[        [        US   5      5       Vs/ s H
  o2S   U   PM     sn-   5      $ s  snf r   )r   r`   rq   r4   r   s       r   tiled_productr     sI    G-Fq	{E#fQi.<Q%R<QqQil<Q%RRSS%Rr   crdc                     [        [        XR                  5      [        XR                  5      5      [	        XR                  UR                  5      4$ r!   )r   r   r)   r*   r   )r   ra   s     r   slice_and_offsetr     s:    vc<<(&mm*DE\\6==1 r   r!   )r   ).__doc__	itertoolsr   typingr   typing_extensionsr   r   	int_tupler   r	   r
   r   r   r   r   r   r   rS   ru   rQ   r   __annotations__r   r#   r   rU   rV   rW   r`   rB   rE   rh   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>r      s  B
   *
 
 
 (NU63;''$. 	 
	 	% %F8, %@5Z @5H %x/ ) / -6=y =(*U63;-??$FY F!&5#55 !& !! c 6 c 
'AV 'Am 'Av 'AVK6 KM KV K8@E @E+ @E& @EHG' G# Gf GBG*T1 Gftm G:B)D0 BVd] BF [ V 6V k f 4&&& & 	&>86 8K 8F 8
T& T; T6 T9F 9[ 9V 9
T6 TK TF T
%, f vs{AS r   