Ë
    M²jH  ã                   ó°  — U d Z ddlmZ ddlmZ ddlmZmZ ddlm	Z	m
Z
mZmZmZmZmZmZmZ eez  eedf   z  dz  Zeed	<    G d
„ d«      Zdeded   fd„Z G d„ de«      Zeez  Zeed<   eedf   ez  dz  Zeed<   eez  eedf   z  dz  Zeed<   deeedf   z  defd„Zdedefd„Zdedefd„Zd-dededefd„Z d-dededefd„Z!dededefd„Z"d.dededefd „Z#dedz  dedz  fd!„Z$dedz  dedz  fd"„Z%dededefd#„Z&dededefd$„Z'd%edededefd&„Z(dededefd'„Z)dededefd(„Z*dededefd)„Z+dededefd*„Z,d+eedf   dedeeef   fd,„Z-y)/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                   ó   — e Zd Zy)Ú
LayoutBaseN)Ú__name__Ú
__module__Ú__qualname__© ó    ú_/var/www/html/ia-enhanced/venv/lib/python3.12/site-packages/torch/distributed/_pycute/layout.pyr   r   =   s   „ Ør   r   ÚxÚreturnÚLayoutc                 ó"   — t        | t        «      S ©N)Ú
isinstancer   )r   s    r   Ú	is_layoutr    A   s   € Ü�aœÓ$Ð$r   c                   óš   — e Zd Zddededz  ddfd„Zdedefd„Zdefd„Z	d	e
deez  fd
„Zdedefd„Zdefd„Zdefd„Zdefd„Zdefd„Zy)r   NÚ_shapeÚ_strider   c                 óZ   — || _         |€t        | j                   «      | _        y || _        y r   )Úshaper   Ústride)Úselfr"   r#   s      r   Ú__init__zLayout.__init__F   s%   € ØˆŒ
Øˆ?Ü(¨¯©Ó4ˆD�Kà!ˆD�Kr   Úotherc                 óŒ   — t        |t        «      sy| j                  |j                  k(  xr | j                  |j                  k(  S )NF)r   r   r%   r&   )r'   r)   s     r   Ú__eq__zLayout.__eq__N   s4   € Ü˜%¤Ô(ØØ�z‰z˜UŸ[™[Ñ(ÒH¨T¯[©[¸E¿L¹LÑ-HÐHr   c                 óX   — t        | j                  «      rt        | j                  «      S y©Nr   )r   r%   Úlen©r'   s    r   Ú__len__zLayout.__len__T   s   € Ü�D—J‘JÔÜ�t—z‘z“?Ð"àr   Úargsc                 ó¶  — t        |«      r|t        |«      dk(  r:t        t        |d   | j                  «      t        |d   | j
                  «      «      S t        t        || j                  «      t        || j
                  «      «      S t        |«      dk(  r$t        |d   | j                  | j
                  «      S t        || j                  | j
                  «      S )a  
        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
   r.   r   r   r%   r&   r   )r'   r1   s     r   Ú__call__zLayout.__call__[   s¡   € ô �DŒ>Ü�4‹y˜AŠ~Üœf T¨!¡W¨d¯j©jÓ9¼6À$ÀqÁ'È4Ï;É;Ó;WÓXÐXäœf T¨4¯:©:Ó6¼¸tÀTÇ[Á[Ó8QÓRÐRä�4‹y˜AŠ~Ü˜t A™w¨¯
©
°D·K±KÓ@Ð@ä˜t T§Z¡Z°·±Ó=Ð=r   Úic                 óÎ   — t        | j                  «      r&t        | j                  |   | j                  |   «      S |dk7  rt        ‚t        | j                  | j                  «      S )Nr   )r   r%   r   r&   ÚAssertionError)r'   r4   s     r   Ú__getitem__zLayout.__getitem__o   sM   € Ü�D—J‘JÔÜ˜$Ÿ*™* Q™-¨¯©°Q©Ó8Ð8à�AŠvÜ$Ð$Ü˜$Ÿ*™* d§k¡kÓ2Ð2r   c                 ó,   — t        | j                  «      S r   )r   r%   r/   s    r   ÚsizezLayout.sizex   s   € Ü�t—z‘zÓ"Ð"r   c                 ó:   —  | | j                  «       dz
  «      dz   S r-   )r9   r/   s    r   ÚcosizezLayout.cosize|   s   € Ù�D—I‘I“K !‘OÓ$ qÑ(Ð(r   c                 ó8   — | j                   › d| j                  › �S )Nú:©r%   r&   r/   s    r   Ú__str__zLayout.__str__€   s   € Ø—*‘*�˜Q˜tŸ{™{˜mÐ,Ð,r   c                 ó<   — d| j                   › d| j                  › d�S )NzLayout(ú,ú)r>   r/   s    r   Ú__repr__zLayout.__repr__„   s   € Ø˜Ÿ™˜ A d§k¡k ]°!Ð4Ð4r   r   )r   r   r   r   r(   ÚobjectÚboolr+   Úintr0   r   r   r3   r7   r9   r;   Ústrr?   rC   r   r   r   r   r   E   sœ   „ ñ"˜xð "°(¸T±/ð "ÈTó "ðI˜Fð I tó Ið˜ó ð>˜nð >°¸±ó >ð(3˜Sð 3 Tó 3ð#�có #ð)˜ó )ð-˜ó -ð5˜#ô 5r   ÚLayoutOrIntTupleÚLayoutProfileÚLayoutInputÚlayoutsc                  ó€   — t        | «      dk(  rt        | d   «      s| d   } t        d„ | D «       Ž \  }}t        ||«      S )Nr   r   c              3   óL   K  — | ]  }|j                   |j                  f–— Œ y ­wr   r>   )Ú.0Úas     r   ú	<genexpr>zmake_layout.<locals>.<genexpr>“   s   è ø€ Ò?°!˜1Ÿ7™7 A§H¡HÔ-Ñ?ùs   ‚"$)r.   r    Úzipr   )rK   r%   r&   s      r   Úmake_layoutrR   �   sC   € Ü
ˆ7ƒ|�qÒ¤¨7°1©:Ô!6Ø˜!‘*ˆäÑ?°wÔ?Ð@�M€Eˆ6Ü�%˜Ó Ð r   Úlayoutc                 óN   — t        | «      r| j                  «       S t        | «      S r   )r    r9   r   ©rS   s    r   r9   r9   ˜   s    € Ü�ÔØ�{‰{‹}ÐÜ�6‹?Ðr   c                 ó"   — | j                  «       S r   )r;   rU   s    r   r;   r;   Ÿ   s   € Ø�=‰=‹?Ðr   Úprofilec                 ó  ‡ ‡— t        ‰«      rst        ‰ «      t        ‰«      k  rt        ‚t        t	        ˆ ˆfd„t        t        ‰«      «      D «       ˆ fd„t        t        ‰«      t        ‰ «      «      D «       «      «      S dg}dg}t        t        t        ‰ j                  «      «      t        t        ‰ j                  «      «      «      D ]Z  \  }}|dk(  rŒ|d   dk(  r||d<   ||d<   Œ|d   |d   z  |k(  r|d   |z  |d<   Œ9|j                  |«       |j                  |«       Œ\ t        |«      dk(  rt        |d   |d   «      S |j                  «        |j                  «        t        t        |«      t        |«      «      S )Nc              3   óB   •K  — | ]  }t        ‰|   ‰|   «      –— Œ y ­wr   )Úcoalesce©rN   r4   rS   rW   s     €€r   rP   zcoalesce.<locals>.<genexpr>«   s    øè ø€ ÒN°Q”˜& ™) W¨Q¡Z×0ÑNùó   ƒc              3   ó(   •K  — | ]	  }‰|   –— Œ y ­wr   r   ©rN   r4   rS   s     €r   rP   zcoalesce.<locals>.<genexpr>¬   ó   øè ø€ ÒE˜q�˜•ÑEùó   ƒr   r   éÿÿÿÿ)r   r.   r6   rR   r   ÚrangerQ   Úreversedr	   r%   r&   Úappendr   ÚreverseÚtuple©rS   rW   Úresult_shapeÚresult_strider%   r&   s   ``    r   rZ   rZ   ¤   ss  ù€ Ü�ÔÜˆv‹;œ˜W›Ò%Ü Ð ÜäÜN¼%ÄÀGÃÓ:MÔNÛE¤E¬#¨g«,¼¸F»Ó$DÔEóó
ð 	
ð �3€LØ�C€Mô Ü”˜Ÿ™Ó&Ó'¬´'¸&¿-¹-Ó2HÓ)Ióò )‰ˆˆvð �AŠ:Øà˜"Ñ Ò"Ø$ˆL˜ÑØ &ˆM˜"Òà˜"Ñ ¨bÑ 1Ñ1°VÒ;Ø+¨BÑ/°%Ñ7ˆL˜Òð ×Ñ Ô&Ø× Ñ  Õ(ð!)ô$ ˆ<Ó˜AÒÜ�l 1‘o }°QÑ'7Ó8Ð8à×ÑÔØ×ÑÔÜ”e˜LÓ)¬5°Ó+?Ó@Ð@r   c                 ó\  ‡ ‡— t        ‰«      rst        ‰ «      t        ‰«      k  rt        ‚t        t	        ˆ ˆfd„t        t        ‰«      «      D «       ˆ fd„t        t        ‰«      t        ‰ «      «      D «       «      «      S g }g }t        t        ‰ j                  «      t        ‰ j                  «      «      D ]3  \  }}|dk(  rŒ|dk(  rŒ|j                  |«       |j                  |«       Œ5 t        |«      dk(  rt        dd«      S t        t        t        |«      t        |«      «      «      S )Nc              3   óB   •K  — | ]  }t        ‰|   ‰|   «      –— Œ y ­wr   )Úfilterr[   s     €€r   rP   zfilter.<locals>.<genexpr>Ö   s    øè ø€ ÒL°1”˜˜q™	 7¨1¡:×.ÑLùr\   c              3   ó(   •K  — | ]	  }‰|   –— Œ y ­wr   r   r^   s     €r   rP   zfilter.<locals>.<genexpr>×   r_   r`   r   r   )r   r.   r6   rR   r   rb   rQ   r	   r%   r&   rd   r   rZ   rf   rg   s   ``    r   rl   rl   Ï   sö   ù€ Ü�ÔÜˆv‹;œ˜W›Ò%Ü Ð ÜäÜL¼¼cÀ'»lÓ8KÔLÛE¤E¬#¨g«,¼¸F»Ó$DÔEóó
ð 	
ð €LØ€MÜœW V§\¡\Ó2´G¸F¿M¹MÓ4JÓKò )‰ˆˆvà˜“
˜f¨›kØ×Ñ Ô&Ø× Ñ  Õ(ð	)ô ˆ<Ó˜AÒÜ�a˜‹|Ðäœœu \Ó2´E¸-Ó4HÓIÓJÐJr   ÚlayoutAÚlayoutBc                 óú  ‡ ‡— ‰€‰ S t        ‰«      rt        ‰ t        ‰«      «      S t        ‰«      rst	        ‰ «      t	        ‰«      k  rt
        ‚t        t        ˆ ˆfd„t        t	        ‰«      «      D «       ˆ fd„t        t	        ‰«      t	        ‰ «      «      D «       «      «      S t        ‰j                  «      rt        ˆ fd„‰D «       «      S ‰j                  dk(  rt        ‰j                  d«      S g }g }‰j                  }‰j                  }t        ‰ «      }t        t        t        |j                  «      dd  «      t        t        |j                  «      dd  «      «      D ]j  \  }}||z  dk(  s||z  dk(  st
        ‚t        t!        d||z  «      |«      }	|	dk7  r%|j#                  |	«       |j#                  ||z  «       ||	z  }| |z   }Œl |dk7  st	        |«      dk(  r;|j#                  |«       |j#                  |t        |j                  «      d   z  «       |j%                  «        |j%                  «        t	        |«      dk(  rt        |d   |d   «      S t        t'        |«      t'        |«      «      S )Nc              3   óB   •K  — | ]  }t        ‰|   ‰|   «      –— Œ y ­wr   ©Úcomposition©rN   r4   rn   ro   s     €€r   rP   zcomposition.<locals>.<genexpr>ö   s    øè ø€ ÒR¸”˜W Q™Z¨°©×4ÑRùr\   c              3   ó(   •K  — | ]	  }‰|   –— Œ y ­wr   r   ©rN   r4   rn   s     €r   rP   zcomposition.<locals>.<genexpr>÷   ó   øè ø€ ÒG �˜•ÑGùr`   c              3   ó6   •K  — | ]  }t        ‰|«      –— Œ y ­wr   rr   )rN   Ú	layoutB_irn   s     €r   rP   zcomposition.<locals>.<genexpr>û   s   øè ø€ ÒT¸yœ; w°	×:ÑTùs   ƒr   r   )r   rs   r   r   r.   r6   rR   r   rb   r%   r&   rZ   rQ   rc   r	   ÚminÚmaxrd   re   rf   )
rn   ro   rh   ri   Ú
rest_shapeÚrest_strideÚflat_AÚ
curr_shapeÚcurr_strideÚ	new_shapes
   ``        r   rs   rs   ë   sC  ù€ Ø€ØˆÜ	�ŒÜ˜7¤F¨7£OÓ4Ð4Ü	�'Ô	Üˆw‹<œ#˜g›,Ò&Ü Ð ÜäÜR¼eÄCÈÃLÓ>QÔRÛG¤U¬3¨w«<¼¸W»Ó%FÔGóó
ð 	
ô 
�'—-‘-Ô	 ÜÓTÈGÔTÓTÐTà‡~�~˜ÒÜ�g—m‘m QÓ'Ð'àˆØˆØ—]‘]ˆ
Ø—n‘nˆÜ˜'Ó"ˆô (+Ü”W˜VŸ\™\Ó*¨1¨2Ð.Ó/´¼'À&Ç-Á-Ó:PÐQRÐQSÐ:TÓ1Uó(
ò 	Ñ#ˆJ˜ð  Ñ,°Ò1°[À:Ñ5MÐQRÒ5RÜ$Ð$ÜœC  :°Ñ#<Ó=¸zÓJˆIà˜AŠ~Ø×#Ñ# IÔ.Ø×$Ñ$ [°;Ñ%>Ô?à# yÑ0ˆJà� 
Ñ*ð‰Kð	ð& ˜Š?œc ,Ó/°1Ò4Ø×Ñ 
Ô+Ø× Ñ  ¬w°v·}±}Ó/EÀaÑ/HÑ!HÔIð 	×ÑÔØ×ÑÔäˆ|Ó Ò!Ü˜, q™/¨=¸Ñ+;Ó<Ð<äœ% Ó-¬u°]Ó/CÓDÐDr   Úmax_idxc                 óf  — t        | «      rt        t        | «      «      S g }g }d}t        t	        t        | j                  «      t        | j                  «      «      «      }|D ][  \  }}|dk(  s|dk(  rŒ|||z  k  }t        |«      t        u r|st        ‚|j                  ||z  «       |j                  |«       ||z  }Œ] |j                  ||z   dz
  |z  «       |j                  |«       |j                  «        |j                  «        t        t        t        |«      t        |«      «      «      S )Nr   r   )r   Ú
complementr   ÚsortedrQ   r	   r&   r%   ÚtyperE   r6   rd   re   rZ   rf   )	rS   r‚   rh   ri   Úcurrent_idxÚ	sorted_DSr&   r%   Úin_bounds	            r   r„   r„   /  s  € Üˆf„~Üœ& ›.Ó)Ð)à€LØ€MØ€Kä”sœ7 6§=¡=Ó1´7¸6¿<¹<Ó3HÓIÓJ€IØ"ò %‰ˆ�Ø�QŠ;˜% 1š*Øà %¨&¡.Ñ0ˆä�‹NœdÑ"©HÜ Ð à×Ñ˜F kÑ1Ô2Ø×Ñ˜[Ô)Ø˜f‘n‰ð%ð ×Ñ˜ ;Ñ.°Ñ2°{ÑBÔCØ×Ñ˜Ô%ð ×ÑÔØ×ÑÔä”Fœ5 Ó.´°mÓ0DÓEÓFÐFr   c           	      óÞ  — | €y t        | «      rt        | «      S g }g }d}t        | j                  «      }t        | j                  «      }t        t        ||t        |«      «      «      }|D ]:  \  }}}	|dk(  rŒ||k7  r n)|j                  |«       |j                  |	«       ||z  }Œ< |j                  «        |j                  «        t        t        t        |«      t        |«      «      «      S r-   )r   r   r	   r%   r&   r…   rQ   r   rd   re   rZ   rf   )
rS   rh   ri   r‡   Ú
flat_shapeÚflat_strideÚ
sorted_DSAr&   r%   Úrstrides
             r   Úright_inverser�   P  sä   € Ø€~ØÜ	�ŒÜ�f‹~Ðà€LØ€MØ€Kä˜Ÿ™Ó&€JÜ˜&Ÿ-™-Ó(€KÜœ˜K¨´^ÀJÓ5OÓPÓQ€JØ",ò %Ñˆ��wØ�AŠ:ØØ˜&Ò Ùà×Ñ˜EÔ"Ø×Ñ˜WÔ%Ø˜f‘n‰ð%ð ×ÑÔØ×ÑÔÜ”Fœ5 Ó.´°mÓ0DÓEÓFÐFr   c                 óp   — | €y t        | «      rt        | «      S t        t        t	        | «      | «      «      S r   )r   r   r�   rR   r„   rU   s    r   Úleft_inverser‘   m  s2   € Ø€~ØÜ	�ŒÜ�f‹~ÐÜœ¤Z°Ó%7¸Ó@ÓAÐAr   c                 óœ  ‡ ‡— ‰€‰ S t        ‰«      rt        ‰ t        ‰«      «      S t        ‰«      rst	        ‰ «      t	        ‰«      k  rt
        ‚t        t        ˆ ˆfd„t        t	        ‰«      «      D «       ˆ fd„t        t	        ‰«      t	        ‰ «      «      D «       «      «      S t        ‰ t        ‰t        ‰t        ‰ «      «      «      «      S )Nc              3   óB   •K  — | ]  }t        ‰|   ‰|   «      –— Œ y ­wr   )Úlogical_dividert   s     €€r   rP   z!logical_divide.<locals>.<genexpr>‚  s(   øè ø€ ò àô # 7¨1¡:¨w°q©z×:ñùr\   c              3   ó(   •K  — | ]	  }‰|   –— Œ y ­wr   r   rv   s     €r   rP   z!logical_divide.<locals>.<genexpr>†  rw   r`   )r   r”   r   r   r.   r6   rR   r   rb   rs   r„   r9   ©rn   ro   s   ``r   r”   r”   w  s¯   ù€ Ø€ØˆÜ	�ŒÜ˜g¤v¨g£Ó7Ð7Ü	�'Ô	Üˆw‹<œ#˜g›,Ò&Ü Ð Üäôä"¤3 w£<Ó0ôó H¤U¬3¨w«<¼¸W»Ó%FÔGóó	
ð 		
ô ØÜ�GœZ¨´°g³Ó?Ó@óð r   c                 ó´  ‡ ‡— ‰€‰ S t        ‰«      rt        ‰ t        ‰«      «      S t        ‰«      rst	        ‰ «      t	        ‰«      k  rt
        ‚t        t        ˆ ˆfd„t        t	        ‰«      «      D «       ˆ fd„t        t	        ‰«      t	        ‰ «      «      D «       «      «      S t        ‰ t        t        ‰ t        ‰ «      t        ‰«      z  «      ‰«      «      S )Nc              3   óB   •K  — | ]  }t        ‰|   ‰|   «      –— Œ y ­wr   )Úlogical_productrt   s     €€r   rP   z"logical_product.<locals>.<genexpr>�  s(   øè ø€ ò àô $ G¨A¡J°¸±
×;ñùr\   c              3   ó(   •K  — | ]	  }‰|   –— Œ y ­wr   r   rv   s     €r   rP   z"logical_product.<locals>.<genexpr>¡  rw   r`   )r   r”   r   r   r.   r6   rR   r   rb   rs   r„   r9   r;   r–   s   ``r   r™   r™   ’  s¸   ù€ Ø€ØˆÜ	�ŒÜ˜g¤v¨g£Ó7Ð7Ü	�'Ô	Üˆw‹<œ#˜g›,Ò&Ü Ð Üäôä"¤3 w£<Ó0ôó H¤U¬3¨w«<¼¸W»Ó%FÔGóó	
ð 		
ô ØÜ”J˜w¬¨W«¼¸w»Ñ(GÓHÈ'ÓRóð r   Úsplitterc                 óò  ‡ ‡‡‡— ‰€t        t        dd«      ‰«      S t        ‰«      rÈt        ‰«      t        ‰«      k  rt        ‚t        ˆˆˆ fd„t        t        ‰«      «      D «       «      Št        t        ˆfd„t        t        ‰«      «      D «       «      t        t        ˆfd„t        t        ‰«      «      D «       ˆfd„t        t        ‰«      t        ‰«      «      D «       «      «      «      S  ‰ ‰‰«      S )Nr   r   c              3   óD   •K  — | ]  }t        ‰‰|   ‰|   «      –— Œ y ­wr   )Ú
hier_unzip)rN   r4   rn   ro   r›   s     €€€r   rP   zhier_unzip.<locals>.<genexpr>·  s*   øè ø€ ò 
àô �x ¨¡¨W°Q©Z×8ñ
ùs   ƒ c              3   ó.   •K  — | ]  }‰|   d    –— Œ y­w)r   Nr   ©rN   r4   Úsplits     €r   rP   zhier_unzip.<locals>.<genexpr>½  s   øè ø€ ÒA¨˜˜a™ �ÑAùó   ƒc              3   ó.   •K  — | ]  }‰|   d    –— Œ y­w)r   Nr   r    s     €r   rP   zhier_unzip.<locals>.<genexpr>À  s   øè ø€ Ò> Q�U˜1‘X˜a•[Ñ>ùr¢   c              3   ó(   •K  — | ]	  }‰|   –— Œ y ­wr   r   rv   s     €r   rP   zhier_unzip.<locals>.<genexpr>Á  s   øè ø€ ÒK A�W˜Q•ZÑKùr`   )rR   r   r   r.   r6   rb   r   )r›   rn   ro   r¡   s   ```@r   rž   rž   ¬  sÈ   û€ ð
 €Üœ6 ! Q›<¨Ó1Ð1Ü	�'Ô	Üˆw‹<œ#˜g›,Ò&Ü Ð äõ 
äœ3˜w›<Ó(ô
ó 
ˆô
 ÜÓA¬U´3°w³<Ó-@ÔAÓAÜÜÛ>¬%´°G³Ó*=Ô>ÛK¬¬s°7«|¼SÀ»\Ó)JÔKóóó
ð 	
ñ �G˜WÓ%Ð%r   c                 ó$   — t        t        | |«      S r   )rž   r”   r–   s     r   Úzipped_divider¦   Ë  s   € Ü”n g¨wÓ7Ð7r   c           	      óš   — t        | |«      }t        |d   gt        t        |d   «      «      D �cg c]
  }|d   |   ‘Œ c}z   «      S c c}w ©Nr   r   )r¦   rR   rb   r.   ©rn   ro   Úresultr4   s       r   Útiled_divider«   Ð  sG   € Ü˜7 GÓ,€FÜ˜˜q™	�{¼EÄ#ÀfÈQÁiÃ.Ó<QÖ%R°q f¨Q¡i°£lÒ%RÑRÓSÐSùÒ%Ró   °A
c                 ó$   — t        t        | |«      S r   )rž   r™   r–   s     r   Úzipped_productr®   Ö  s   € Ü”o w°Ó8Ð8r   c           	      óš   — t        | |«      }t        |d   gt        t        |d   «      «      D �cg c]
  }|d   |   ‘Œ c}z   «      S c c}w r¨   )r®   rR   rb   r.   r©   s       r   Útiled_productr°   Û  sG   € Ü˜G WÓ-€FÜ˜˜q™	�{¼EÄ#ÀfÈQÁiÃ.Ó<QÖ%R°q f¨Q¡i°£lÒ%RÑRÓSÐSùÒ%Rr¬   Úcrdc                 ó¬   — t        t        | |j                  «      t        | |j                  «      «      t	        | |j                  |j                  «      fS r   )r   r   r%   r&   r   )r±   rS   s     r   Úslice_and_offsetr³   à  s@   € äŒv�c˜6Ÿ<™<Ó(¬&°°f·m±mÓ*DÓEÜ��V—\‘\ 6§=¡=Ó1ðð r   r   )r   ).Ú__doc__Ú	itertoolsr   Útypingr   Útyping_extensionsr   r   Ú	int_tupler   r	   r
   r   r   r   r   r   r   rF   rf   rD   r   Ú__annotations__r   r    r   rH   rI   rJ   rR   r9   r;   rZ   rl   rs   r„   r�   r‘   r”   r™   rž   r¦   r«   r®   r°   r³   r   r   r   ú<module>rº      sÐ  ðòBõ
 Ý ß *÷
÷ 
õ 
ð ˆ(�N�U˜6 3˜;Ñ'Ñ'¨$Ñ.ð �	ó ÷
	ñ 	ð%�ð %˜F 8Ñ,ó %ô@5ˆZô @5ðH % xÑ/Ð �)Ó /Ø  ¨ Ñ-°Ñ6¸Ñ=€ˆyÓ =Ø (Ñ*¨U°6¸3°;Ñ-?Ñ?À$Ñ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°f¸t±mó Gð:BÐ)¨DÑ0ð B°V¸d±]ó Bð˜Fð ¨[ð ¸Vó ð6˜Vð ¨kð ¸fó ð4&Øð&àð&ð ð&ð ó	&ð>8˜6ð 8¨Kð 8¸Fó 8ð
T˜&ð T¨;ð T¸6ó Tð9˜Fð 9¨[ð 9¸Vó 9ð
T˜6ð T¨Kð T¸Fó Tð
˜% ¨ Ñ,ð °fð ÀÀvÈsÀ{ÑASô r   