
    ȅi4&              	       2   % S r SSKJr  SSKJr  SSKJr  SSKJr  SSKJ	r	  \
\S   -  r\\S	'   S
\S\\
   4S jrS
\S\\   4S jrS
\S\\S4   4S jrS\S\S\4S jrS\S\\
S4   4S jrS\
S\
4S jrS\S\
4S jrS\S\S\
4S jr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jrS+S\S\S \S-  S\4S! jjr S+S"\S-  S\S \S-  S\
4S# jjr S+S"\S$\S%\S-  S\4S& jjrS"\\
-  S-  S'\\
-  S\\
-  4S( jrS\\
-  S-  S\4S) jr g),z&
Functions for manipulating IntTuples
    )reduce)chain)	TypeAlias)TypeIs   )Integer)IntTuple.r	   xreturnc                 "    [        U [        5      $ N)
isinstancer   r
   s    ]/home/james-whalen/.local/lib/python3.13/site-packages/torch/distributed/_pycute/int_tuple.pyis_intr   1   s    a!!    c                 "    [        U [        5      $ r   )r   tupler   s    r   is_tupler   5   s    ar   .c                 ,    [        U 5      (       a  U 4$ U $ r   )r   r   s    r   as_tupler   9   s    ayytHr   abc                     [        U 5      (       a  [        U5      (       a  g[        U 5      (       aI  [        U5      (       a9  [        U 5      [        U5      :H  =(       a    [        S [	        X5       5       5      $ g)NTc              3   <   #    U  H  u  p[        X5      v   M     g 7fr   )match_structure.0r
   ys      r   	<genexpr>"match_structure.<locals>.<genexpr>C   s     'T)$!(=(=)   F)r   r   lenallzipr   r   s     r   r   r   ?   sQ    ayyVAYY{{x{{1vQTC'T#a)'T$TTr   tc                 l    [        U 5      (       a"  [        U 5      S:X  a  g[        S U  5       5      $ U 4$ )Nr    c              3   J   #    U  H  n[        U5        H  o"v   M     M     g 7fr   )flatten)r   r   is      r   r    flatten.<locals>.<genexpr>L   s     :Aqwqz!zAs   !#)r   r#   r   )r'   s    r   r+   r+   G   s1    {{q6Q;:A:::tr   c                 <    [        U S:  5      [        U S:  5      -
  $ )Nr   )boolr   s    r   signumr1   Q   s    A;a!e$$r   c                 B    [        U 5      (       a  [        S U S5      $ U $ )Nc                     U [        U5      -  $ r   )product)valelems     r   <lambda>product.<locals>.<lambda>W   s    gdm(;r   r   )r   r   r0   s    r   r4   r4   U   s     {{;QBBr   c                     [        U 5      (       aE  [        U5      (       a5  [        U 5      [        U5      :X  d   e[        S [        X5       5       5      $ [        U 5      (       d  [        U5      (       a   eX-  $ )Nc              3   <   #    U  H  u  p[        X5      v   M     g 7fr   )inner_productr   s      r   r     inner_product.<locals>.<genexpr>_   s     =941=&&9r"   )r   r#   sumr%   r&   s     r   r;   r;   \   s\    {{x{{1vQ=3q9===A;;x{{22ur   c                 J    [        U 5      (       a  [        S U  5       5      $ U $ )Nc              3   8   #    U  H  n[        U5      v   M     g 7fr   )	tuple_max)r   r
   s     r   r    tuple_max.<locals>.<genexpr>g   s     +A9Q<<   )r   maxr0   s    r   r@   r@   e   s!    {{++++r   c                    [        U 5      (       aP  [        U5      (       a5  [        U 5      [        U5      :X  d   e[        S [        X5       5       5      $ [	        S5      e[        U5      (       a  [        U [        U5      5      $ X-  $ )Nc              3   <   #    U  H  u  p[        X5      v   M     g 7fr   )
elem_scaler   s      r   r    elem_scale.<locals>.<genexpr>p   s     @idaA))ir"   z#Invalid combination: tuple with int)r   r#   r   r%   AssertionErrorrF   r4   r&   s     r   rF   rF   l   sl    {{A;;q6SV###@c!i@@@ !FGGA;;a,,5Lr   c                    [        U 5      (       a  [        U5      (       a5  [        U 5      [        U5      :X  d   e[        S [        X5       5       5      $ / nU  H2  nUR	                  [        X15      5        [        U[        U5      5      nM4     [        U5      $ [        U5      (       a  [        U [        U5      5      $ X-  S:X  d
  X-  S:X  d   eX-   S-
  U-  $ )Nc              3   <   #    U  H  u  p[        X5      v   M     g 7fr   )	shape_divr   s      r   r    shape_div.<locals>.<genexpr>   s     ?YTQ1Yr"   r   r   )r   r#   r   r%   appendrK   r4   )r   r   rvs       r   rK   rK   {   s    {{A;;q6SV###?SY??? A1)a,  8OA;;Q
++5A:!++EAI!##r   initc                    [        U 5      (       a  [        U5      (       a5  [        U 5      [        U5      :X  d   e[        S [        X5       5       5      $ / n[	        [        U 5      S-
  SS5       H0  nUR                  [        X   U5      5        U[        X   5      -  nM2     UR                  5         [        U5      $ [        U5      (       a  [        S5      eU$ )Nc              3   <   #    U  H  u  p[        X5      v   M     g 7fr   )suffix_product)r   r
   r,   s      r   r    !suffix_product.<locals>.<genexpr>   s     G,$!--,r"   r   z(Invalid combination: int with tuple init)
r   r#   r   r%   rangerM   rS   r4   reverserH   )r   rP   rN   r,   s       r   rS   rS      s    {{D>>q6SY&&&G#a,GGG
 A 3q6A:r2.d34gadm+ /
 IIK8OD>> !KLLKr   Nidxshapestridec                 6  ^  Uc  [        U5      n[        T 5      (       ay  [        U5      (       a^  [        U5      (       aN  [        T 5      [        U5      :X  a  [        U5      [        U5      :X  d   e[        S [	        T X5       5       5      $ [        S5      e[        U5      (       aH  [        U5      (       a8  [        U5      [        U5      :X  d   e[        U 4S j[	        X5       5       5      $ [        U5      (       d  [        U5      (       a   eT U-  U-  $ )Nc              3   @   #    U  H  u  pn[        XU5      v   M     g 7fr   idx2crd)r   r,   sds       r   r    idx2crd.<locals>.<genexpr>   s      Q9PgaAq))9P   z*Invalid combination: tuple with int stridec              3   @   >#    U  H  u  p[        TX5      v   M     g 7fr   r]   )r   r_   r`   rX   s      r   r    ra      s     K8Ja++8Js   )rS   r   r#   r   r%   rH   )rX   rY   rZ   s   `  r   r^   r^      s    ~&}}E??x//s8s5z)c&kSZ.GGGQS%9PQQQ !MNNE??x//u:V,,,KE8JKKKx/?/???6MU**r   crdc           	         Uc  [        U5      n[        U 5      (       a  [        U5      (       a^  [        U5      (       aN  [        U 5      [        U5      :X  a  [        U5      [        U5      :X  d   e[        S [	        XU5       5       5      $ [        SU  SU 35      eU c  Sn [        U5      (       a  [        U5      (       a  [        U5      [        U5      :X  d   eSn[        [        U5      S-
  SS5       H5  nU[        U [        X   5      -  X   X$   5      -  nU [        X   5      -  n M7     [        U5      S:  a  U[        XS   US   5      -  nU$ [        U5      (       d  [        U5      (       a   eX-  $ )Nc              3   @   #    U  H  u  pn[        XU5      v   M     g 7fr   )crd2idx)r   cr_   r`   s       r   r    crd2idx.<locals>.<genexpr>   s      O7NGA!wqQ''7Nrb   zInvalid combination: crd=z, shape=r   r   rU   )	rS   r   r#   r=   r%   rH   rV   rg   r4   )rd   rY   rZ   resultr,   s        r   rg   rg      sX    ~&}}E??x//s8s5z)c&kSZ.GGGOs3v7NOOO #<SE%!QRR;CE??x//u:V,,,F3u:>1b1'#(9"958VYOOWUX.. 2 5zA~'#Qx;;Mx/?/???<r   	dst_shape	src_shapec                    [        U 5      (       aU  [        U5      (       a5  [        U 5      [        U5      :X  d   e[        S [        X5       5       5      $ Uc   e[	        X5      $ [        U5      (       a  [        X5      $ X:  d   eU $ )Nc              3   <   #    U  H  u  p[        X5      v   M     g 7fr   )crd2crdr   s      r   r    crd2crd.<locals>.<genexpr>   s     G3F413Fr"   )r   r#   r   r%   rg   r^   )rd   rk   rl   s      r   ro   ro      s     }}Is8s9~---G3s3FGGG (((3**I3**?"?Jr   trgc                 ,   [        U 5      (       ax  [        U5      (       a]  [        U 5      [        U5      :X  d   e[        [        [	        S [        X5       VVs/ s H  u  p#[        X#5      PM     snn5      6 5      $ [        S5      eU c  U4$ gs  snnf )Nc                     U S:g  $ )Nr)   r)   r   s    r   r7   slice_.<locals>.<lambda>   s    !r'r   z+Invalid combination: tuple crd with int trgr)   )r   r#   r   r   filterr%   slice_rH   )rd   rq   rh   r_   s       r   rv   rv      s    }}C==s8s3x''')25c-@-$!-@  !!NOO	v As   Bc                 N    [        U 5      (       a  [        S U  5       5      $ U S L $ )Nc              3   8   #    U  H  n[        U5      v   M     g 7fr   )has_none)r   rO   s     r   r    has_none.<locals>.<genexpr>  s     *18A;;rB   )r   anyr0   s    r   ry   ry   	  s&    {{****Dyr   )r   r   )!__doc__	functoolsr   	itertoolsr   typingr   typing_extensionsr   r   intr   r	   __annotations__objectr   r   r   r/   r   r+   r1   r4   r;   r@   rF   rK   rS   r^   rg   ro   rv   ry   r)   r   r   <module>r      s#  B    $  E/22) 2"f " "   6%=   U8S=1 x H  x E#s(O %c %c %x C X ( s  c ( x H $ $h $8 $*h h x 6+ +( +HtO +x +( FJ 	D !) 3;d?  B FJ	&3;d?(d"   .d" t r   