ó
    
ÞšjD  ã                  ó(  • S SK Jr  S SKrS SKrS SKJrJrJr  S SKrS SKJ	r	  Sr
\R                  " S5      r " S S\5      rS	 rS
 rS rS rS rS rS rS rS rS rS r\" SS9S 5       rS rSS.S jr  S!S jrS r " S S5      rS r S  r!g)"é    )ÚannotationsN)Ú	lru_cacheÚreduceÚwraps)Ú	is_tensor)Ú1Ú_z[\w\-]+c                  ó   • \ rS rSrSrg)Ú
ShapeErroré   © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__static_attributes__r   ó    Ú¦C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\torch_einops_utils/shape.pyr   r      s   † Úr   r   c                ó
   • U S L$ ©Nr   )Úvals    r   Úexistsr      s   € Ø�dˆ?Ðr   c                óX   • [        U 5      (       a  U $ [        U5      (       a  U" 5       $ U$ r   )r   Úcallable)r   Úds     r   Údefaultr      s$   € Ü˜—+‘+ˆ3Ð<¬(°1¯+©+¡1£3Ð<¸1Ð<r   c                ó&   • US:w  a  X-  S:H  $ U S:H  $ )Nr   r   )ÚnumÚdens     r   Údivisible_byr       s   € Ø" a›xˆC‰I˜!ÑÐ5¨S°A©XÐ5r   c                óB   • U [         ;   =(       d    U R                  5       $ r   )ÚANONYMOUS_AXESÚisdigit)Únames    r   Úis_anonymous_or_numr%      s   € Ø”>Ñ!×3 T§\¡\£^Ð3r   c                ó   • [        S U S5      $ )Nc                ó
   • X-  $ r   r   )ÚaccÚxs     r   Ú<lambda>Úprod.<locals>.<lambda>#   s   €  ¢r   é   )r   )Úarrs    r   Úprodr.   "   s   € ÜÑ(¨#¨qÓ1Ð1r   c                ó   • S S S U 4$ r   r   )Úreasons    r   Úfailr1   %   s   € Ø��t˜VÐ#Ð#r   c                óv   • [        U 5      (       d)  [        R                  U 5      (       d   SU SU  S35       eg g )Nú	pattern "z" has invalid axis name "Ú")r%   ÚNAME_REÚ	fullmatch)r$   Úpatterns     r   Úvalidate_namer8   *   sA   € Ü˜t×$Ñ$Ü× Ñ  ×&Ñ&Ð]¨)°G°9Ð<UÐVZÐU[Ð[\Ð(]Ó]Ñ&ð %r   c                ó  • U R                  S5      nUS   US   pCUS:w  a  UOUS:w  a  UR                  5       (       d  UOS nUR                  5       (       a  [        U5      OS n[        U5      (       a  [	        XQ5        SXV4$ )Nú...r   éÿÿÿÿÚ Úellipsis)Úsplitr#   Úintr   r8   )Ú	token_strr7   ÚpartsÚprefixÚsuffixr$   Úlengths          r   Ú_ellipsis_tokenrE   .   st   € Ø�O‰O˜EÓ"€EØ˜1‘X˜u R™yˆFà˜r“\‰6°&¸B³,ÀvÇ~Á~×GWÑGW©Ð]a€DØ"ŸN™N×,Ñ,ŒS�Œ[°$€Fäˆd‡|�|Ü�dÔ$à˜Ð%Ð%r   c                óú  • / nS[        U 5      p2X#:  Ga«  X   R                  5       (       a  US-  nM$  X   S:X  aå  U R                  SU5      nUS:w  d   SU  S35       eSXS-   U ;  d   SU  S35       eXS-   U R                  5       R	                  5       n[        U5      S:”  d   SU  S	35       e[        U5      S:X  a(  S
US   ;   a  UR                  [        US   U 5      5        O0U H  n[        X`5        M     UR                  S[        U5      45        US-   nGM  UnXC:  aJ  X   R                  5       (       d3  X   S;  a+  US-  nXC:  a!  X   R                  5       (       d
  X   S;  a  M+  XU nUnS
U;   a  UR                  [        Xp5      5        GM‹  [        Xp5        UR                  SU45        X#:  a  GM«  [        U5      S:”  d   SU  S35       e[        S U 5       5      S::  d   SU  S35       eU$ )Nr   r,   Ú(Ú)r;   r3   z" has an unclosed parenthesisz1" has nested parentheses, which are not supportedz" has an empty groupr:   Úgroupz()r$   z
" is emptyc              3  ód   #   • U  H&  oS    S:H  =(       a    [        US   5      (       + v •  M(     g7f©r   r=   é   N©r   ©Ú.0Útoks     r   Ú	<genexpr>Ú_tokenize.<locals>.<genexpr>d   s*   é € ÐMÂf¸s�1‰v˜Ñ#×:¬F°3°q±6«NÔ(:Ô:Âfùó   ‚.0z," has more than one variable-length ellipsis)
ÚlenÚisspaceÚfindÚstripr>   ÚappendrE   r8   ÚtupleÚsum)r7   ÚtokensÚiÚnÚjÚgroup_tokensr$   r@   s           r   Ú	_tokenizer`   :   s-  € Ø€FØŒc�'‹l€qà
Œ%Ø‰:×Ñ×ÑØ�‰FˆAÙà‰:˜ÓØ—‘˜S !Ó$ˆAØ˜“7ÐN˜i¨ yÐ0MÐNÓN�7Ø˜g¨!¡e¨AÐ.Ó.Ðv°)¸G¸9ÐDuÐ0vÓvÐ.à" q¡5¨Ð+×1Ñ1Ó3×9Ñ9Ó;ˆLÜ�|Ó$ qÓ(ÐS¨I°g°YÐ>RÐ*SÓSÐ(ä�<Ó  AÓ%¨%°<À±?Ó*BØ—‘œo¨l¸1©o¸wÓGÕHã(�DÜ! $Ö0ñ )à—‘˜w¬¨lÓ(;Ð<Ô=à�A‘ˆAÚàˆØ‹e˜G™J×.Ñ.×0Ñ0°W±ZÀtÓ5KØ�‰FˆAð ‹e˜G™J×.Ñ.×0Ñ0°W±ZÀtÕ5Kð ˜a�Lˆ	Øˆà�IÓØ�M‰Mœ/¨)Ó=Ô>Úä�iÔ)Ø�‰�v˜yÐ)Ô*ðG Ž%ôJ ˆv‹;˜‹?Ð;˜i¨ y°
Ð;Ó;ˆ?ÜÑMÁfÓMÓMÐQRÓRð  VÐV_Ð`gÐ_hð  iUð  UVó  VÐRà€Mr   c                ór   • U S   S:X  a  [        U S   5      (       a  U S   4$ S$ U S   S:X  a  U S   $ U S   4$ )Nr   r=   r,   r   rI   rM   )rP   s    r   Ú_axis_namesrb   h   sK   € Ø
ˆ1�v�ÓÜ" 3 q¡6ŸN™N��A‘ˆyÐ2°Ð2Ø˜‘V˜wÓ&ˆ3ˆq‰6Ð5¨S°©V¨IÐ5r   c                óâ   • / n[        5       nU  H\  n[        U5       HJ  n[        U5      (       a  M  XS;  d   SU SU S35       eUR                  U5        UR	                  U5        ML     M^     U$ )Nr3   ú" repeats axis "r4   )Úsetrb   r%   ÚaddrX   )r[   r7   ÚnamesÚseenrP   r$   s         r   Ú_collect_namesri   m   st   € Ø€EÜ‹5€DãˆÜ Ö$ˆDÜ" 4×(Ñ(ÙØÓ#ÐQ y°°	Ð9IÈ$ÈÈqÐ%QÓQÐ#Ø�H‰H�TŒNØ�L‰L˜Öó %ñ ð €Lr   é   )Úmaxsizec                ó0  • [        U [        5      (       d   S[        U 5      R                   35       eU R	                  S5      tp[        U5      S::  d   SU  S35       e[        U5      n[        X05      n[        U5      S:X  a  X4S 4$ US   n[        UR                  5       5      S:”  d   SU  S35       e/ n[        5       n[        S U 5       5      n[        U5       H²  n	U	S   S	:X  a  [        SU  S
35      eU	S   S:X  a&  U	S   b   SU  S35       eU(       d   SU  S35       eSn
O[        U	S   5      (       a  M_  U	S   n
U
S:X  d  X¤;   d   SU  SU
 S35       eX§;  d   SU  SU
 S35       eUR                  U
5        UR                  U	5        M´     X4U4$ )Nzpattern must be a string, got ú->r,   r3   z" has more than one arrow "->"r   z"" has nothing after the arrow "->"c              3  ó0   #   • U  H  oS    S:H  v •  M     g7f)r   r=   Nr   rN   s     r   rQ   Ú parse_pattern.<locals>.<genexpr>�   s   é € ÐCºF°S ™F jÖ0ºFùs   ‚rI   z(" cannot use groups after the arrow "->"r=   rL   z/" only supports bare "..." after the arrow "->"zC" uses "..." after the arrow "->" but the left side has no ellipsisr:   z" selects axis "z&" that is not on the left side of "->"rd   z" after the arrow "->")Ú
isinstanceÚstrÚtyper   r>   rT   r`   ri   rW   re   ÚanyÚAssertionErrorr%   rf   rX   )r7   ÚleftÚrestr[   rg   ÚrightÚ	selectionrh   Úleft_has_ellipsisrP   Úkeys              r   Úparse_patternr{   {   sÓ  € ä�gœs×#Ñ#Ð^Ð'EÄdÈ7Ãm×F\ÑF\ÐE]Ð%^Ó^Ð#à—-‘- Ó%€K€DÜˆt‹9˜‹>ÐN˜Y w iÐ/MÐNÓNˆ>ä�t‹_€FÜ˜6Ó+€Eä
ˆ4ƒy�Aƒ~Ø˜dÐ"Ð"à�‰G€EÜˆu�{‰{‹}Ó Ó!ÐZ Y¨w¨iÐ7YÐ#ZÓZÐ!à€IÜ‹5€DÜÑC¹FÓCÓCÐä˜ÖˆØˆq‰6�WÓÜ  9¨W¨IÐ5]Ð!^Ó_Ð_àˆq‰6�ZÓØ�q‘6‘>Ðg Y¨w¨iÐ7fÐ#gÓg�>Þ$Ð~¨	°'°Ð:}Ð&~Ó~Ð$Ø‰Cä" 3 q¡6×*Ñ*ÙØ�a‘&ˆCà�e‹|˜s›|Ð}¨y¸¸	ÐAQÐRUÐQVÐV|Ð-}Ó}Ð+Ø‹Ð` )¨G¨9Ð4DÀSÀEÐI_Ð `Ó`ˆØ�‰�ŒØ×Ñ˜Öñ!  ð$ ˜)Ð#Ð#r   c                óx  • [        S U  5       5      n[        S U  5       5      nUS:”  a8  U[        U5      :”  a  [        SU S[        U5       35      $ [        U5      U-
  nO+U[        U5      :w  a  [        SU S[        U5       35      $ Sn[        5       [        5       pv[        U5      nS n	Sn
U  GHû  nUS   US   S:H  pÜU(       a  [	        US   U5      OS	nU(       a  [        XX®-    5      OX   nXªU-   nnUn
U(       a¾  US	   n[        U5      (       aŒ  UU;   ah  [        UU   [
        [        45      (       a  [        UU   5      OUU   n[        U5      U:w  a(  [        S
U SU SU SUU    S[        U5       3
5      s  $ [        U5      UU'   [        UU5      UU'   O[        U5      n	[        UU5      US'   GM  US:X  a�  US	   n[        U5      (       aD  UR                  5       (       a.  U[        U5      :w  a  [        SU S[        U5       SU 35      s  $ O4UU;   a%  UU   U:w  a  [        S
U SU SUU    SU 35      s  $ XöU'   UUU'   GM¥  US	   n[        5       nU H8  nUU;   a
  UU   UU'   M  UR                  5       (       d  M*  [        U5      UU'   M:     U Vs/ s H  nUU;  d  M  US:w  d  M  UPM     nn[        UR                  5       5      nSSR                  U5       S3n[        U5      S:X  a   UU:w  a  [        SU SU SU SU 35      s  $ OL[!        UU5      (       d  [        SU SU SU SU 35      s  $ [        U5      S	:X  a  US:w  a  UU-  OSUUS   '   UR#                  5        H*  u  nnUU;   d  M  [        U5      (       a  M   UUU'   UUU'   M,     GMþ     XgU	S 4$ s  snf )Nc              3  óT   #   • U  H  nUS    S;   a  SOUS   =(       d    S v •  M      g7f)r   )r$   rI   r,   rL   Nr   rN   s     r   rQ   Úmatch.<locals>.<genexpr>¦   s0   é € ð âˆCð �‰VÐ(Ó(‰¨s°1©v¯{¸Ô;Úùs   ‚&(c              3  ód   #   • U  H&  oS    S:H  =(       a    [        US   5      (       + v •  M(     g7frK   rM   rN   s     r   rQ   r~   «   s,   é € ÐWÒPVÈ˜Q™ :Ñ-×D´f¸SÀ¹V³nÔ2DÔDÒPVùrS   r   zexpected at least z dims, got z	expected r=   rL   r,   úaxis "z" at position Ú:z should be z, got r:   r$   zaxis at position z should be of size r	   rG   Ú rH   zgroup "z should have product z" should have product divisible by )rZ   rT   r1   Údictr   rY   r   rp   ÚlistÚslicer%   r#   r?   r.   ÚvaluesÚjoinr    Úitems)r[   ÚshapeÚ
assertionsÚfixed_len_sumÚn_var_ellipsisÚvar_lenÚdimsÚindicesÚknownÚellipsis_shapeÚcurrrP   Útok_typeÚis_ellipsisrD   Údim_valÚstartÚendr$   ÚexpectedÚgroup_namesÚgroup_knownÚunknownÚknown_productÚ
group_reprÚsizes                             r   ÚmatchrŸ   ¥   s$  € Üñ áóó €Mô
 ÑWÑPVÓWÓW€Nà˜ÓØœ3˜u›:Ó%ÜÐ,¨]¨O¸;ÄsÈ5ÃzÀlÐSÓTÐTÜ�e“*˜}Ñ,‰àœC ›JÓ&Ü˜) M ?°+¼cÀ%»j¸\ÐJÓKÐKØˆä“FœD›Fˆ'Ü�Ó€EØ€NØ€DäˆØ # A¡¨¨A©°*Ñ(<�+Þ-8”˜˜Q™ Ô)¸aˆÞ6A”%˜ 4¡=Ð1Ô2ÀuÁ{ˆØ &™=ˆsˆØˆæØ�q‘6ˆDÜ�d�|‰|Ø˜5“=Ü5?ÀÀdÁÌeÔUYÈ]×5[Ñ5[œu U¨4¡[Ô1ÐafÐgkÑal�HÜ˜W“~¨Ó1Ü# f¨T¨F°.ÀÀÀqÈÈÈ[ÐY^Ð_cÑYdÐXeÐekÔlpÐqxÓlyÐkzÐ${Ó|Ò|Ü! '›]��T‘
Ü % e¨SÓ 1�˜’ä!% g£�Ü!& u¨cÓ!2�˜‘âà�vÓØ�q‘6ˆDä" 4×(Ñ(Ø—<‘<—>‘> g´°T³Ó&:ÜÐ"3°E°7Ð:MÌcÐRVËiÈ[ÐX^Ð_fÐ^gÐ hÓiÒiøØ˜“ 5¨¡;°'Ó#9Ü˜f T F¨.¸¸¸{È5ÐQUÉ;È-ÐW]Ð^eÐ]fÐgÓhÒhà$�T‘
Ø %�˜‘âà˜!‘fˆä“fˆÛˆDØ�u‹}Ø$)¨$¡K�˜DÓ!Ø—‘—“Ü$'¨£I�˜DÓ!ñ	  ñ %0Ó[¢K˜D°4¸{Ñ3J“4ÈtÐWZÉ{—4¡KˆÐ[Ü˜[×/Ñ/Ó1Ó2ˆØ˜Ÿ™ +Ó.Ð/¨qÐ1ˆ
äˆw‹<˜1ÓØ Ó'Ü˜g j \°À¸wÐF[Ð\iÐ[jÐjpÐqxÐpyÐzÓ{Ò{ð (ô   ¨×7Ñ7Ü˜g j \°À¸wÐFhÐivÐhwÐw}ð  Fð  ~Gð  Hó  Iò  Iä�7‹|˜qÓ Ø@MÐQRÓ@R G¨}Ò$<ÐXY��g˜a‘jÑ!àŸ+™+ž-‰JˆD�$Ø�{Õ"Ô+>¸t×+DÓ+DØ!��T‘
Ø %�˜“ô (ñw ð@ ˜.¨$Ð.Ð.ùò' \s   Ê(
N7Ê6N7Ê>N7T)Úthrow_errorc          
     óX  • [        U 5      (       d   S[        U 5      R                   35       e[        U5      u  pEn[	        [
        S[        5      nUR                  5        HY  u  p‰[        U	[        U[        [        45      (       d    SU S[        U	5      R                   35       eX…;   a  MM   SU SU S35       e   [        X@R                  U5      u  p«pÍ[        U5      (       a/  U(       a'  [        S[        U R                  5       S	U S
U 35      eg [        U R                  XX¼XFS9$ )Nzshape() expects a tensor, got ÚSymIntzassertion for axis "z&" must be an int, tuple, or list, got úasserted axis "ú" is not in pattern "r4   ztensor of shape z does not match pattern "ú": )r[   rx   )r   rr   r   r{   ÚgetattrÚtorchr?   rˆ   rp   rY   r„   rŸ   r‰   r   r   ÚParsedShape)Útr7   r    rŠ   r[   rg   rx   r¢   r$   ÚvaluerŽ   r�   r‘   Úerrors                 r   r‰   r‰   ÿ   sK  € ô �Q�<‰<ÐLÐ9¼$¸q»'×:JÑ:JÐ9KÐLÓLˆ<ä,¨WÓ5Ñ€F�9ä”U˜H¤cÓ*€Fà!×'Ñ'Ö)‰ˆÜ˜%¤# v¬u´dÐ!;×<Ñ<ð  	XÐ@TÐUYÐTZð  [Aô  BFð  GLó  BM÷  BVñ  BVð  AWð  ?Xó  	XÐ<Ø�}ÐU °¨vÐ5JÈ7È)ÐSTÐUÓUˆ}ñ *ô ,1°¿¹À*Ó+MÑ(€D�>äˆe‡}�}ÞÜÐ/´°a·g±g³Ð/?Ð?XÐY`ÐXaÐadÐejÐdkÐlÓmÐmØä�q—w‘w ¨wÐQWÑoÐor   c                óR   • SU;  d   SU S35       e[        [        X4SS0UD65      $ )Nrm   z3is_shape() does not support arrow patterns, given "r4   r    F)r   r‰   )r©   r7   rŠ   s      r   Úis_shaper­     s>   € ð
 �wÓÐ`Ð"UÐV]ÐU^Ð^_Ð `Ó`ÐÜ”%˜ÑF°%ÐF¸:ÑFÓGÐGr   c                óâ  • [        S U  5       S 5      n[        5       [        5       / p‡nSn	U H¼  n
U
S   S:X  a1  [        U5      (       a  UOX%   n[        X™[	        U5      -   5      US'   OCU
S   nX,   nX¶U'   [        U[        [        45      (       d  U	O[        X™[	        U5      -   5      X|'   UR                  U5        U	[        U[        [        45      (       a  [	        U5      OS-  n	M¾     XgU4$ )Nc              3  ój   #   • U  H)  oS    S:X  d  M  [        US   5      (       d  M"  US   v •  M+     g7f)r   r=   r,   NrM   rN   s     r   rQ   Ú%_extract_selection.<locals>.<genexpr>%  s+   é € ÐMš6�C¨¡V¨zÑ%9‹¼fÀSÈÁV¿n‹ˆˆQŽš6ùs   ‚3’3§3r   r=   r:   r,   )	Únextrƒ   r   r…   rT   rp   rY   r„   rX   )r[   rx   rŽ   r�   r=   Úleft_ellipsis_nameÚsel_dimsÚsel_indicesÚ	sel_itemsÚposrP   Úitemr$   s                r   Ú_extract_selectionr¸   #  sî   € ÜÙM™6ÓMØóÐô
 (,£v¬t«v°r˜9€HØ
€CãˆØˆq‰6�ZÓÜ% h×/Ñ/‘8°TÑ5MˆDÜ!& s´#°d³)©OÓ!<ˆK˜Òà�q‘6ˆDØ‘:ˆDØ!�T‰NÜ+5°d¼UÄD¸M×+JÑ+J¡ÔPUÐVYÔadÐeiÓajÑ[jÓPkˆKÑà×Ñ˜ÔØœJ t¬e´T¨]×;Ñ;Œs�4ŒyÀÑBŠñ ð  )Ð+Ð+r   c                  óê   • \ rS rSr  SS jr\S 5       r\S 5       r\S 5       r\S 5       r	\S 5       r
\S	 5       r\S
 5       rS rS rS rS rSS jrS rS rS rS rS rS rS rS rS rSrg)r¨   i;  Nc                ó–  • [        U5      U l        X l        [        U5      (       a  [	        U5      OS U l        [        U5      U l        S U l        [        U5      (       aJ  [        U R                  XsX@R
                  5      u  p4U l        [        S U R                   5       5      U l        [        U5      U l
        [        U5      U l        g )Nc              3  ót   #   • U  H.  n[        U[        [        45      (       a  UOU4  H  o"v •  M     M0     g 7fr   )rp   rY   r„   )rO   r·   Údims      r   rQ   Ú'ParsedShape.__init__.<locals>.<genexpr>O  sF   é € ð   C²¨ÔT^Ð_cÔfkÔmqÐer×TsÑTsÉDÐz~ð  zAó  MAÀC¤ñ  MA¡²ùs   ‚68)rY   Ú_shapeÚ_patternr   r„   Ú	_ellipsisÚ_tokensÚ
_selectionr¸   rƒ   Ú_dimsÚ_indices)Úselfr‰   r7   rŽ   r�   r‘   r[   rx   s           r   Ú__init__ÚParsedShape.__init__=  sž   € ô ˜E“lˆŒØŒÜ17¸×1GÑ1Gœ˜nÔ-ÈTˆŒÜ˜V“}ˆŒØˆŒä�)×ÑÜ-?ÀÇÁÈiÐ_f×hvÑhvÓ-wÑ*ˆD˜4œ?Üñ   C°·²ó   Có  CˆDŒKä˜$“ZˆŒ
Ü˜W›ˆ�r   c                ó   • U R                   $ r   )r¿   ©rÅ   s    r   r7   ÚParsedShape.patternT  s   € Ø"Ÿm™mÐ+r   c                ó   • U R                   $ r   )r¾   rÉ   s    r   r‰   ÚParsedShape.shapeV  s   € Ø ŸK™KÐ'r   c                ó,   • [        U R                  5      $ r   )rT   r¾   rÉ   s    r   ÚndimÚParsedShape.ndimX  s   € Ü˜tŸ{™{Ó+Ð+r   c                ó,   • [        U R                  5      $ r   )rƒ   rÃ   rÉ   s    r   rŽ   ÚParsedShape.dimsZ  s   € Ü §
¡
Ó+Ð+r   c                óH   • [        U R                  R                  5       5      $ r   )rY   rÃ   ÚkeysrÉ   s    r   rg   ÚParsedShape.names\  s   € Ü! $§*¡*§/¡/Ó"3Ó4Ð4r   c                ó   • U R                   $ r   )rÀ   rÉ   s    r   r=   ÚParsedShape.ellipsis^  s   € Ø#Ÿ~™~Ð-r   c                ó,   • [        U R                  5      $ r   )r.   r¾   rÉ   s    r   ÚtotalÚParsedShape.total`  s   € Ü  §¡Ó-Ð-r   c                ó8   • U R                   R                  U5      $ r   )rÄ   Úget©rÅ   r$   s     r   ÚaxisÚParsedShape.axisc  s   € Ø�}‰}× Ñ  Ó&Ð&r   c                ó6   • U R                   R                  5       $ r   )rÃ   rÓ   rÉ   s    r   rÓ   ÚParsedShape.keysf  s   € Ø�z‰z�‰Ó Ð r   c                ó6   • U R                   R                  5       $ r   )rÃ   r†   rÉ   s    r   r†   ÚParsedShape.valuesi  s   € Ø�z‰z× Ñ Ó"Ð"r   c                ó6   • U R                   R                  5       $ r   )rÃ   rˆ   rÉ   s    r   rˆ   ÚParsedShape.itemsl  s   € Ø�z‰z×ÑÓ!Ð!r   c                ó”   • US:X  a(  [        U R                  5      (       a  U R                  $ U$ U R                  R                  X5      $ ©Nr:   )r   rÀ   rÃ   rÛ   )rÅ   r$   r   s      r   rÛ   ÚParsedShape.geto  s9   € Ø�5‹=Ü%+¨D¯N©N×%;Ñ%;�4—>‘>ÐHÀÐHØ�z‰z�~‰~˜dÓ,Ð,r   c                óJ  • [        U R                  5      nUR                  5        Hp  u  p4U R                  R	                  U5      n[        U5      (       d  [        SU SU R                   S35      e[        U[        5      (       a  [        U5      OUX%'   Mr     [        U5      $ )Nr€   r¤   r4   )r„   r¾   rˆ   rÄ   rÛ   r   ÚKeyErrorr¿   rp   r…   rY   )rÅ   Úsizesr‰   r$   rž   Úindex_or_slices         r   ÚreplaceÚParsedShape.replacet  sˆ   € Ü�T—[‘[Ó!ˆàŸ+™+ž-‰JˆDØ!Ÿ]™]×.Ñ.¨tÓ4ˆNÜ˜.×)Ñ)Ü ¨ vÐ-BÀ4Ç=Á=À/ÐQRÐSÓTÐTÜ2<¸^ÌU×2SÑ2S¤D¨¤JÐY]ˆEÓ!ñ	 (ô �U‹|Ðr   c                óú   ^ • [        U[        5      (       a  UR                  nO6[        U[        5      (       d!  [	        S[        U5      R                   35      e[        U 4S jUR                  5        5       5      $ )Nz-matches() expects a ParsedShape or dict, got c              3  óp   >#   • U  H+  u  pUTR                   ;   d  M  TR                   U   U:H  v •  M-     g 7fr   )rÃ   )rO   r$   rž   rÅ   s      €r   rQ   Ú&ParsedShape.matches.<locals>.<genexpr>…  s2   øé € Ðbºm±
°ÈtÐW[×WaÑWaÑOaÓ+�4—:‘:˜dÑ# tÖ+ºmùs   ƒ6�6)	rp   r¨   rŽ   rƒ   Ú	TypeErrorrr   r   Úallrˆ   ©rÅ   Úothers   ` r   ÚmatchesÚParsedShape.matches  s\   ø€ Ü�eœ[×)Ñ)Ø—J‘J‰EÜ˜E¤4×(Ñ(ÜÐKÌDÐQVËK×L`ÑL`ÐKaÐbÓcÐcäÔb¸e¿k¹k¼mÓbÓbÐbr   c                óˆ   • U R                   R                  S5      n[        U5      (       a	  X;   a  X!   $ [        SU S35      e)NrÃ   zParsedShape has no axis named "r4   )Ú__dict__rÛ   r   ÚAttributeError)rÅ   r$   rŽ   s      r   Ú__getattr__ÚParsedShape.__getattr__‡  s@   € Ø�}‰}× Ñ  Ó)ˆÜ�$�<‰<˜D›LØ‘:ÐÜÐ>¸t¸fÀAÐFÓGÐGr   c                ó   • US:X  a?  [        U R                  5      (       d  [        SU R                   S35      eU R                  $ XR                  ;  a  [        SU SU R                   S35      eU R                  U   $ )Nr:   r3   z" has no ellipsisr€   r¤   r4   )r   rÀ   ré   r¿   rÃ   rÜ   s     r   Ú__getitem__ÚParsedShape.__getitem__�  ss   € Ø�5‹=Ü˜$Ÿ.™.×)Ñ)Ü ¨4¯=©=¨/Ð9JÐKÓLÐLØ—>‘>Ð!Ø—z‘zÓ!Ü˜V D 6Ð)>¸t¿}¹}¸oÈQÐOÓPÐPØ�z‰z˜$ÑÐr   c                óT   • US:X  a  [        U R                  5      $ XR                  ;   $ ræ   )r   rÀ   rÃ   rÜ   s     r   Ú__contains__ÚParsedShape.__contains__–  s%   € Ø�5‹=Ü˜$Ÿ.™.Ó)Ð)Ø—z‘zÑ!Ð!r   c              #  ó0  #   • [        U R                  5      (       a  U R                   S h  v•N   g U R                   HÑ  nUS   S:X  ac  US   n[        U5      (       a"  X R                  ;   a  U R                  U   v •  MC  [        U R
                  5      (       a  U R
                  v •  Mm  Mo  US   S:X  a+  US   U R                  ;   a  U R                  US      v •  M¡  M£  US    H%  nX R                  ;   d  M  U R                  U   v •  M'     MÓ     g  Nç7f)Nr   r=   r,   r$   )r   rÂ   r¾   rÁ   rÃ   rÀ   )rÅ   rP   r$   s      r   Ú__iter__ÚParsedShape.__iter__›  sê   é € Ü�$—/‘/×"Ñ"Ø—{‘{×"Ð"Øà—<”<ˆCØ�1‰v˜Ó#Ø˜1‘v�Ü˜$—<‘< D¯J©JÓ$6ØŸ*™* TÑ*Ô*Ü˜DŸN™N×+Ñ+ØŸ.™.Ô(ñ ,ð �Q‘˜6Ó!Ø�q‘6˜TŸZ™ZÓ'ØŸ*™* S¨¡VÑ,Ô,ñ (ð   œF�DØŸz™zÕ)Ø"Ÿj™j¨Ñ.Ô.ó #ò  ñ #ùs   ‚*D¬D­C	DÃ:Dc                ó&   • [        S U  5       5      $ )Nc              3  ó&   #   • U  H  nS v •  M	     g7f)r,   Nr   )rO   r	   s     r   rQ   Ú&ParsedShape.__len__.<locals>.<genexpr>²  s   é € Ð#šd˜•1šdùs   ‚)rZ   rÉ   s    r   Ú__len__ÚParsedShape.__len__±  s   € ÜÑ#™dÓ#Ó#Ð#r   c                óH  • [        U[        5      (       a9  U R                  UR                  :H  =(       a    U R                  UR                  :H  $ [	        U5      (       a  UR
                  n[        U[        [        45      (       a  U R                  [        U5      :H  $ [        $ r   )	rp   r¨   rg   r¾   r   r‰   rY   r„   ÚNotImplementedró   s     r   Ú__eq__ÚParsedShape.__eq__´  sr   € Ü�eœ[×)Ñ)Ø—:‘: §¡Ñ,×L°·±ÀÇÁÑ1LÐLÜ�U×ÑØ—K‘KˆEÜ�eœe¤T˜]×+Ñ+Ø—;‘;¤%¨£,Ñ.Ð.ÜÐr   c                ó\   • SU R                   < SU R                  < SU R                  < S3$ )NzParsedShape(pattern = z
, shape = z	, dims = rH   )r¿   r¾   rÃ   rÉ   s    r   Ú__repr__ÚParsedShape.__repr__½  s0   € Ø'¨¯©Ñ'8¸
À4Ç;Á;Á/ÐQZÐ[_×[eÑ[eÑZhÐhiÐjÐjr   )rÃ   rÀ   rÄ   r¿   rÂ   r¾   rÁ   )r   Nr   )r   r   r   r   rÆ   Úpropertyr7   r‰   rÎ   rŽ   rg   r=   rØ   rÝ   rÓ   r†   rˆ   rÛ   rì   rõ   rú   rý   r   r  r  r  r  r   r   r   r   r¨   r¨   ;  s¼   † ð Øô&ð. Ù+ó Ø+ØÙ'ó Ø'ØÙ+ó Ø+ØÙ+ó Ø+ØÙ4ó Ø4ØÙ-ó Ø-ØÙ-ó Ø-ò'ò!ò#ò"ô-ò
	òcòHò ò"ò
/ò,$òõkr   r¨   c                ó¶   • [        U [        [        45      =(       a=    [        U 5      S:H  =(       a(    [	        U S   5      =(       a    [        U S   [
        5      $ )NrL   r   r,   )rp   rY   r„   rT   r   rq   )Úspecs    r   Ú_is_pairr  Â  sK   € ä�4œ%¤˜Ó'÷ 	%Ü�‹I˜‰N÷	%ä�d˜1‘gÓ÷	%ô �t˜A‘w¤Ó$ð	r   c                ó  ^ ^^• [        T [        [        45      (       Ga)  [        T 5      (       Gd  [	        U5      S:X  d   S5       e[        T 5      (       a  T 4OT n[        U[        [        45      (       a&  [	        U5      S:”  a  [        S U 5       5      (       d   S[        T 5      R                   35       e[        T5      nU H}  u  pV[        U5      u  pxn[        XV40 UR                  5        V	V
s0 s H  u  pšX˜;   d  M  Xš_M     sn
n	D6nUR                  R                  5        H  u  pšUR                  Xš5        M     M     g [        T [        5      mT(       d2  [        T [        5      (       d   S[        T 5      R                   35       eT(       a[  [!        5       nT R#                  5        H"  n[        U5      u  pxnUR%                  U5        M$     T H  n	Xœ;   a  M
   SU	 ST  35       e   UUU 4S jnU$ s  sn
n	f )	Nr   zrassert_shape() called directly expects a single (tensor, pattern) or list of pairs, got extra positional argumentsc              3  ó8   #   • U  H  n[        U5      v •  M     g 7fr   )r  ©rO   Úps     r   rQ   Úassert_shape.<locals>.<genexpr>Ï  s   é € ÐJfÒ`eÐ[\Ì8ÐTUÏ;È;Ò`eùs   ‚zVassert_shape() called directly expects a (tensor, pattern) pair or list of pairs, got z]assert_shape() expects a (tensor, pattern) pair, list of pairs, pattern string, or dict, got r£   z" is not in any pattern of c                óh   >^ ^• [         R                  " T 5      m[        T 5      UU UUU4S j5       nU$ )Nc                 óD  >• TR                   " U 0 UD6nUR                  5         T(       a×  [        T5      nTR                  5        H·  u  pE[	        UR
                  R                  U5      5      (       d  M0  [        U5      u  pgn [        UR
                  U   U40 UR                  5        VV	s0 s H  u  p‰X‡;   d  M  X‰_M     sn	nD6n
U
R                  R                  5        H  u  p‰UR                  X‰5        M     M¹     On[        S TR                  R                  5        5       S 5      n[	        UR
                  R                  U5      5      (       a  [        UR
                  U   T40 TD6  T" U 0 UD6$ s  sn	nf ! [         a  n[        SU SU 35      S eS nAff = f)Nz
argument "r¥   c              3  óæ   #   • U  Hg  nUR                   S ;  d  M  UR                  [        R                  R                  [        R                  R
                  4;  d  MY  UR                   v •  Mi     g7f))rÅ   ÚclsN)r$   ÚkindÚinspectÚ	ParameterÚVAR_POSITIONALÚVAR_KEYWORDr  s     r   rQ   ÚAassert_shape.<locals>.decorator.<locals>.inner.<locals>.<genexpr>  sg   é € ð Ú(E 1ØŸ6™6¨Ñ8ó Ø=>¿V¹VÌG×L]ÑL]×LlÑLlÔnu×nÑn÷  oLñ  oLð  LMñ  >Mó ˜ŸžÒ(Eùs   ‚A1šA A1ÁA1)ÚbindÚapply_defaultsrƒ   rˆ   r   Ú	argumentsrÛ   r{   r‰   r   rŽ   Ú
setdefaultr±   Ú
parametersr†   )ÚargsÚkwargsÚboundr�   r$   r7   r	   rg   rÝ   rž   ÚparsedÚerrÚarg_namerŠ   ÚfnÚis_dictÚ	signaturer  s                €€€€€r   ÚinnerÚ.assert_shape.<locals>.decorator.<locals>.innerí  s”  ø€ à—N’N DÐ3¨FÑ3ˆEØ× Ñ Ô"æÜ˜ZÓ(�à%)§Z¡Z¦\‘M�DÜ$ U§_¡_×%8Ñ%8¸Ó%>×?Ñ?Ù ä"/°Ó"8‘K�A˜aðPÜ!& u§¡°tÑ'<¸gñ  "HÐgl×grÑgrÔgtô  JGÒgtÑYcÐY]Ðx|ñ  yFË*È$Ê*Ñgtò  JGñ  "H˜ð '-§k¡k×&7Ñ&7Ö&9™
˜Ø×(Ñ(¨Ö4ó ':ò &2ô  ñØ(1×(<Ñ(<×(CÑ(CÔ(Eóð ó�ô ˜UŸ_™_×0Ñ0°Ó:×;Ñ;Ü˜%Ÿ/™/¨(Ñ3°TÑH¸ZÒHá�tÐ&˜vÑ&Ð&ùó# JGøÜ%ó PÜ(¨:°d°V¸3¸s¸eÐ)DÓEÈ4ÐOûðPús0   Â)E>Â.E8Â=E8ÃE>Å8E>Å>
FÆFÆF)r  r1  r   )r/  r2  r1  rŠ   r0  r  s   ` @€€€r   Ú	decoratorÚassert_shape.<locals>.decoratorê  s6   ú€ Ü×%Ò% bÓ)ˆ	ä	ˆr‹÷	'ð 	'ó 
ð	'ðB ˆr   )rp   rY   r„   r   rT   r  rò   rr   r   rƒ   r{   r‰   rˆ   rŽ   r'  rq   re   r†   Úupdate)r  ÚpatternsrŠ   Úpairsr�   r©   r7   r	   rg   rÝ   rž   r,  Ú	all_namesr4  r0  s   ` `           @r   Úassert_shaper:  Ê  sû  ú€ Ü�$œ¤˜×&Ò&¬y¸¯ªÜ�8‹} Ó!ð  	Xð  $Xó  	XÐ!ä# DŸ>™>�‘¨tˆÜ˜%¤$¬ ×/Ñ/´C¸³JÀ³NÄsÑJfÑ`eÓJf×GfÑGfð 	{ØdÔeiÐjnÓeo×exÑexÐdyÐzó	{Ðfô �ZÓ ˆã‰JˆAÜ'¨Ó0‰KˆA�aä˜1ÑgÀuÇ{Á{Ä}Ô)fÂ}¹¸ÐX\ÑXe«*¨$ª*Á}Ò)fÑgˆFà$Ÿk™k×/Ñ/Ö1‘
�Ø× Ñ  Ö,ó 2ñ  ð 	ä˜œtÓ$€GÞ”j ¤s×+Ñ+ð  cð  0Mô  NRð  SWó  NX÷  Nañ  Nað  Mbð  .có  cÐ+æÜ“Eˆ	Ø—{‘{–}ˆGÜ'¨Ó0‰KˆA�aØ×Ñ˜UÖ#ñ %ó ˆDØÕ$Ð_¨¸°vÐ=XÐY]ÐX^Ð&_Ó_Ð$ñ ÷%ðN Ðùóu *gs   Ã5G>ÄG>)ÚreturnÚbool)"Ú
__future__r   Úrer  Ú	functoolsr   r   r   r§   r   r"   Úcompiler5   rt   r   r   r   r    r%   r.   r1   r8   rE   r`   rb   ri   r{   rŸ   r‰   r­   r¸   r¨   r  r:  r   r   r   Ú<module>rA     sÐ   ðÝ "ã 	Û ß .Ñ .ã Ý ð €Ø
�*Š*�ZÓ
 €ô	�ô 	ò
ò=ò6ò4ò2ò$ò
^ò
&ò,ò\6ò
ñ �3Ññ%$ó ð%$òRV/ð| õ	pð4Hð 
ô	Hò,÷0Ckñ CkòNóGr   