§
    ž²ÅjÇQ  ã                   óâ  — d dl Z d dlmZ ddlmZ ddlmZ ddlm	Z	mZ ej
        Z
d dlZd dlmZ  eej        ¦  «        Zd„ Zd	„ Zd
„ Zd„ Zd„ Zd„ Zd&d„Zd„ Z G d„ d¦  «        Z G d„ dee¦  «        Z G d„ dee¦  «        Zi Zeefd„¦   «         Zd„ Z d„ Z!d„ Z" e#¦   «         Z$d„ Z%d„ Z&	 d'd„Z'd „ Z( e)d¦  «        Z*e j+        j,        Z- G d!„ d"¦  «        Z.d#„ Z/d(d$„Z0e j+        j1        Z2d)d%„Z1dS )*é    N©Údimé   )Úop_properties)Ú_enable_layers)Útree_flattenÚtree_map)Úreducec                 ó8   — t          t          j        | d¦  «        S ©Nr   )r
   ÚoperatorÚmul)Úxs    úHC:\Projects\Historical\venv\Lib\site-packages\functorch/dim/reference.pyÚprodr      s   € Ý•(”,  1Ñ%Ô%Ð%ó    c                 ód   — ddl m} t          | |¦  «        r|r
J d¦   «         ‚| S | dk    r| |z
  S | S )Nr   ©ÚDimz8cannot preserve first-class dimensions with keepdim=Truer   ©Ú r   Ú
isinstance)ÚdÚNÚkeepdimr   s       r   Ú	_wrap_dimr      sV   € ØÐÐÐÐÐå�!�SÑÔð ØÐVÐVÐVÑVÔVˆ{ØˆØ	
ˆaŠˆØ�1‰uˆàˆr   c                 óÔ   ‡‡— ddl m} t          | |t          f¦  «        rt	          t          | ‰‰¦  «        f¦  «        S |rJ d| › �¦   «         ‚t	          ˆˆfd„| D ¦   «         ¦  «        S )Nr   r   z.expected a single dimension or int but found: c              3   ó:   •K  — | ]}t          |‰‰¦  «        V — Œd S ©N)r   )Ú.0r   r   r   s     €€r   ú	<genexpr>z_dims.<locals>.<genexpr>/   s/   øè è € Ð6Ð6¨q•)˜A˜q 'Ñ*Ô*Ð6Ð6Ð6Ð6Ð6Ð6r   )r   r   r   ÚintÚltupler   )r   r   r   Ú
single_dimr   s    ``  r   Ú_dimsr%   )   s‹   øø€ ØÐÐÐÐÐå�!�c�3�ZÑ Ô ð 3Ý•y  A wÑ/Ô/Ð1Ñ2Ô2Ð2ØÐOÐOÐOÈAÐOÐOÑOÔOˆ>ÝÐ6Ð6Ð6Ð6Ð6°AÐ6Ñ6Ô6Ñ6Ô6Ð6r   c           
      ó4  — ddl m} t          d„ t          |¦  «        D ¦   «         ¦  «        }t	          |¦  «        dk    re|d         \  }}t          d„ |D ¦   «         ¦  «        }| |z  dk    r*t          d„ |D ¦   «         ¦  «        } |d| › d|› �¦  «        ‚| |z  }	|	|_        d S t	          |¦  «        dk    r*t          d	„ |D ¦   «         ¦  «        } |d
|› d|› �¦  «        ‚t          d„ |D ¦   «         ¦  «        }
| |
k    r |d| › d|
› d|› d|› �¦  «        ‚d S )Nr   )ÚDimensionMismatchErrorc              3   ó2   K  — | ]\  }}|j         °||fV — Œd S r   )Úis_bound)r    ÚiÚrs      r   r!   z%_bind_dims_to_size.<locals>.<genexpr>5   s1   è è € ÐJÐJ¡  A¸q¼zÐJ�q˜!�fÐJÐJÐJÐJÐJÐJr   r   c              3   ó2   K  — | ]}|j         ¯	|j        V — Œd S r   )r)   Úsize©r    r+   s     r   r!   z%_bind_dims_to_size.<locals>.<genexpr>8   s+   è è € Ð<Ð< Q°´Ð<˜!œ&Ð<Ð<Ð<Ð<Ð<Ð<r   c              3   óP   K  — | ]!}|j         sd nt          |j        ¦  «        V — Œ"dS ©ú?N©r)   Ústrr-   r.   s     r   r!   z%_bind_dims_to_size.<locals>.<genexpr>:   s5   è è € ÐNÐNÀQ Q¤ZÐ@˜#˜#µS¸¼±[´[ÐNÐNÐNÐNÐNÐNr   z>inferred dimension does not evenly fit into larger dimension: ú vs c              3   óP   K  — | ]!}|j         sd nt          |j        ¦  «        V — Œ"dS r0   r2   r.   s     r   r!   z%_bind_dims_to_size.<locals>.<genexpr>A   s5   è è € ÐJÐJÀ ¤Ð<�c�cµ°Q´V±´ÐJÐJÐJÐJÐJÐJr   z1cannot infer the size of two dimensions at once: z with sizes c              3   ó$   K  — | ]}|j         V — Œd S r   ©r-   r.   s     r   r!   z%_bind_dims_to_size.<locals>.<genexpr>F   s$   è è € Ð,Ð, 1˜œÐ,Ð,Ð,Ð,Ð,Ð,r   z!Dimension sizes to do not match (z != z) when matching z to )r   r'   ÚtupleÚ	enumerateÚlenr   r-   )Úlhs_sizeÚrhsÚ	lhs_debugr'   Ú	not_boundÚidxr   Ú
rhs_so_farÚrhs_sÚnew_sizeÚrhs_sizes              r   Ú_bind_dims_to_sizerD   2   sž  € Ø(Ð(Ð(Ð(Ð(Ð(åÐJÐJ­°3©¬ÐJÑJÔJÑJÔJ€IÝ
ˆ9�~„~˜ÒÐØ˜1”‰ˆˆQÝÐ<Ð<¨#Ð<Ñ<Ô<Ñ<Ô<ˆ
Ø�jÑ  AÒ%Ð%ÝÐNÐNÈ#ÐNÑNÔNÑNÔNˆEØ(Ð(ØfÐQYÐfÐfÐ_dÐfÐfñô ð ð ˜zÑ)ˆØˆŒˆˆÝ	ˆY‰Œ˜!Ò	Ð	ÝÐJÐJÀcÐJÑJÔJÑJÔJˆØ$Ð$ØXÀÐXÐXÐQVÐXÐXñ
ô 
ð 	
õ Ð,Ð,¨Ð,Ñ,Ô,Ñ,Ô,ˆØ�xÒÐØ(Ð(Øp°HÐpÐpÀ(ÐpÐpÐ\eÐpÐpÐknÐpÐpñô ð ð  Ðr   c                 ó¼   — ddl m} t          | |¦  «        r!| j        t	          | j        ¦  «        | j        fS | t	          t          | j         d¦  «        ¦  «        dfS )Nr   ©Ú_Tensorr   T)	r   rG   r   Ú_tensorÚllistÚ_levelsÚ_has_deviceÚrangeÚndim)ÚinprG   s     r   Ú_tensor_levelsrO   M   sd   € ØÐÐÐÐÐå�#�wÑÔð 5ØŒ{�E #¤+Ñ.Ô.°´Ð?Ð?à•E�% ¤ 	¨1Ñ-Ô-Ñ.Ô.°Ð4Ð4r   c                 ó¤  — g }g }d}|                       ¦   «         }|D ]o}	 |                     |¦  «        }|                     |¦  «         |                     ||         ¦  «         ŒI# t          $ r |                     d¦  «         d}Y Œlw xY w|t	          t          t          |¦  «        ¦  «        ¦  «        k    r
 | j        |Ž } |r
 | j        |Ž } | S )NFr   T)	r-   ÚindexÚappendÚ
ValueErrorÚlistrL   r:   ÚpermuteÚview)	ÚvÚfrom_levelsÚ	to_levelsrV   rU   Úrequires_viewr-   Útr?   s	            r   Ú_match_levelsr\   V   sî   € Ø€DØ€GØ€MØ�6Š6‰8Œ8€DØð !ð !ˆð	!Ø×#Ò# AÑ&Ô&ˆCØ�NŠN˜3ÑÔÐØ�KŠK˜˜Sœ	Ñ"Ô"Ð"Ð"øÝð 	!ð 	!ð 	!Ø�KŠK˜‰NŒNˆNØ ˆMˆMˆMð	!øøøð •$•u�S ™\œ\Ñ*Ô*Ñ+Ô+Ò+Ð+ØˆAŒI�wÐˆØð ØˆAŒF�DˆMˆØ€Hs    AA&Á&!B
Â	B
Fc                 óè  — ddl m} | j        t          | j        ¦  «        }}	 |                     |¦  «        }nP# t          $ rC |s‚ d} |j        |j        g|                     ¦   «         ¢R Ž }| 	                    dd¦  «         Y nw xY wd}t          |¦  «        D ]2}t          ||         t          ¦  «        r||xx         dz  cc<   |dz  }Œ3| dz
  ||<   |                     ||| j        ¦  «        |fS )Nr   )ÚTensorr   )r   r^   rH   rI   rJ   rQ   rS   Úexpandr-   ÚinsertrL   r   r"   Úfrom_positionalrK   )	Úselfr   Ú
expand_dimr^   ÚptensorÚlevelsr?   Úidx_batchedr*   s	            r   Ú_positional_no_permuterg   m   s+  € ØÐÐÐÐÐà”l¥E¨$¬,Ñ$7Ô$7ˆV€GðØ�lŠl˜3ÑÔˆˆøÝð ð ð Øð 	ØØˆØ �'”. ¤Ð;¨G¯LªL©N¬NÐ;Ð;Ð;ˆØ�Š�a˜ÑÔÐÐÐðøøøð €KÝ�3‰ZŒZð ð ˆÝ�f˜Q”i¥Ñ%Ô%ð 	Ø�1ˆIˆIŒI˜‰NˆIˆI‰IØ˜1ÑˆKøØ�, Ñ"€Fˆ3�KØ×!Ò! '¨6°4Ô3CÑDÔDÀkÐQÐQs   £9 ¹A
BÂBc                 óŠ   — ddl m} t          | |¦  «        t          ||¦  «        k    rdS t          | |¦  «        r| |u S | |k    S )Nr   r   Fr   )ÚaÚbr   s      r   Úseqrk   ‚   s\   € ØÐÐÐÐÐå�!�SÑÔ�Z¨¨3Ñ/Ô/Ò/Ð/ØˆuÝ�!�SÑÔð Ø�Aˆvˆà�AŠvˆr   c                   ó   — e Zd Zd„ Zd„ ZdS )Úisinc                 ó6   — | D ]}t          ||¦  «        r dS ŒdS )NTF)rk   )rb   Úitemr   s      r   Ú__contains__zisin.__contains__Ž   s2   € Øð 	ð 	ˆAÝ�4˜‰|Œ|ð Ø�t�tðàˆur   c                 ób   — t          | ¦  «        D ]\  }}t          ||¦  «        r|c S Œt          ‚r   )r9   rk   rS   )rb   ro   r*   r   s       r   rQ   z
isin.index”   s?   € Ý˜d‘O”Oð 	ð 	‰DˆAˆqÝ�4˜‰|Œ|ð Ø���ðåÐr   N)Ú__name__Ú
__module__Ú__qualname__rp   rQ   © r   r   rm   rm   �   s2   € € € € € ðð ð ðð ð ð ð r   rm   c                   ó   — e Zd ZdS )rI   N©rr   rs   rt   ru   r   r   rI   rI   ›   ó   € € € € € Ø€Dr   rI   c                   ó   — e Zd ZdS )r#   Nrw   ru   r   r   r#   r#   Ÿ   rx   r   r#   c                 óÊ  ‡‡‡‡‡‡— ddl mŠmŠmŠ ddlm} |t          j        j        u rG|\  }}t          |‰¦  «        r2t          |‰¦  «        r"|j	        dk    r|j	        dk    r |||¦  «        S t          ¦   «         }t          ||f¦  «        \  }	}
d Š|	D ]C}t          |‰¦  «        r1|j        r|j        Š|j        D ]}||vr|                     |¦  «         ŒŒDˆˆfd„Š|t           v �rt          ¦   «         Šg }t#          |	¦  «        D ]–\  }}t          |‰¦  «        r�t%          |¦  «        \  }}}t          |‰¦  «        r$|j        s‰�|                     ‰j        ¬¦  «        }||	|<   |D ]}|‰vr‰                     |¦  «         Œ|                     ||f¦  «         Œ—|D ]\  }}t+          |	|         |‰¦  «        |	|<   Œ  |
|	¦  «        \  }} ||i |¤Ž}ˆˆˆˆfd„}t-          ||¦  «        S ˆˆˆfd„}t/          |¦  «        5  t1          d	|› �¦  «          |
ˆfd
„|	D ¦   «         ¦  «        \  }} ||i |¤Ž}t-          ||¦  «        cd d d ¦  «         S # 1 swxY w Y   d S )Nr   )rG   r^   Ú
TensorLike)ÚDelayedMulTensorr   c                 ó‚   •— t          | ‰¦  «        r-| j        }‰�"| j        s|                     ‰j        ¬¦  «        }|S | S )N©Údevice)r   Ú_batchtensorrK   Útor   )r[   r+   rG   Údevice_holding_tensors     €€r   Úunwrapz"__torch_function__.<locals>.unwrap¿   sJ   ø€ Ý�a˜Ñ!Ô!ð 	Ø”ˆAØ$Ð0¸¼Ð0Ø—D’DÐ 5Ô <�DÑ=Ô=�ØˆHØˆr   r~   c                 óZ   •— t          | ‰¦  «        r‰                     | ‰‰d u¦  «        S | S r   )r   ra   )r[   r^   r{   r‚   Úresult_levelss    €€€€r   Úwrapz __torch_function__.<locals>.wrapÞ   sA   ø€ Ý˜!˜ZÑ(Ô(ð Ø×-Ò-Ø�}Ð&;À4Ð&Gñô ð ð ˆHr   c                 óX   •— t          | ‰¦  «        r‰                     | ‰d u¦  «        S | S r   )r   Úfrom_batched)r[   r^   r{   r‚   s    €€€r   r†   z __torch_function__.<locals>.wrapè   s7   ø€ Ý˜!˜ZÑ(Ô(ð QØ×*Ò*¨1Ð.CÈ4Ð.OÑPÔPÐPØˆHr   zbatch_tensor for c              3   ó.   •K  — | ]} ‰|¦  «        V — Œd S r   ru   )r    Úfrƒ   s     €r   r!   z%__torch_function__.<locals>.<genexpr>ï   s+   øè è € Ð$BÐ$B°1 V V¨A¡Y¤YÐ$BÐ$BÐ$BÐ$BÐ$BÐ$Br   )r   rG   r^   r{   Údelayed_mul_tensorr|   ÚtorchÚ__mul__r   rM   rI   r   rK   r€   ÚdimsrR   Ú	pointwiser9   rO   r�   r   r\   r	   r   Úprint)rb   ÚorigÚclsÚargsÚkwargsr|   Úlhsr<   Úall_dimsÚ	flat_argsÚ	unflattenrŠ   r   Ú	to_expandr*   rd   re   Ú_ÚlÚresultr†   r^   r{   rG   r‚   r…   rƒ   s                        @@@@@@r   Ú__torch_function__r�   ¦   s¸  øøøøøø€ à-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ø4Ð4Ð4Ð4Ð4Ð4à�uŒ|Ô#Ð#Ð#Ø‰ˆˆSå�s˜GÑ$Ô$ð	.å˜3 Ñ(Ô(ð	.ð ”˜A’�Ø”˜A’�à#Ð# C¨Ñ-Ô-Ð-Ý‰wŒw€HÝ'¨¨v¨Ñ7Ô7Ñ€IˆyØ ÐØð 'ð 'ˆÝ�a˜Ñ!Ô!ð 	'ØŒ}ð 7Ø()¬Ð%Ø”Vð 'ð '�Ø˜HÐ$Ð$Ø—O’O AÑ&Ô&Ð&øøðð ð ð ð ð ð �yÐÑÝ™œˆØˆ	Ý˜iÑ(Ô(ð 	.ð 	.‰DˆAˆqÝ˜!˜ZÑ(Ô(ð .Ý%3°AÑ%6Ô%6Ñ"�˜ å˜q 'Ñ*Ô*ðNàœMðNð .Ð9à%ŸjšjÐ0EÔ0L˜jÑMÔM�GØ&�	˜!‘Øð 0ð 0�AØ Ð-Ð-Ø%×,Ò,¨QÑ/Ô/Ð/øØ× Ò  ! V Ñ-Ô-Ð-øà"ð 	Nð 	N‰IˆAˆvÝ(¨°1¬°v¸}ÑMÔMˆI�a‰LˆLØ �y Ñ+Ô+‰ˆˆfØ��tÐ&˜vÐ&Ð&ˆð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	õ ˜˜fÑ%Ô%Ð%ð	ð 	ð 	ð 	ð 	ð 	ð 	õ
 ˜HÑ%Ô%ð 	*ð 	*ÝÐ, dÐ,Ð,Ñ-Ô-Ð-Ø$˜9Ð$BÐ$BÐ$BÐ$B¸	Ð$BÑ$BÔ$BÑBÔB‰LˆD�&Ø�T˜4Ð* 6Ð*Ð*ˆFå˜D &Ñ)Ô)ð	*ð 	*ð 	*ð 	*ñ 	*ô 	*ð 	*ð 	*ð 	*ð 	*ð 	*ð 	*øøøð 	*ð 	*ð 	*ð 	*ð 	*ð 	*s   ÈAIÉIÉIc                 ó¶  — ddl m}m}m} | j        t          | j        ¦  «        }}t          ¦   «         }g }d}	| j        }
|D �]4}t          |t          ¦  «        r5| 
                    |¦  «         | 
                    d„ |D ¦   «         ¦  «         ŒMt          ||¦  «        r0|                     |¦  «         |                     |j        ¦  «         Œ�t          |t          ¦  «        rOt          ||
d¦  «        }|                     |¦  «         |                     |                     |¦  «        ¦  «         Œñ| 
                    |¦  «         |                     t          d„ |D ¦   «         ¦  «        ¦  «         d}	�Œ6t!          t#          t%          |¦  «        ¦  «        ¦  «        }t'          |¦  «        D ]\  }}	 |                     |¦  «        }n)# t*          $ r} |d| j        › d|› �¦  «        |‚d }~ww xY w||         }||= ||= |                     |d	¦  «         |                     ||¦  «         Œ€ |j        |Ž }d	}t#          t%          |¦  «        dz
  d
d
¦  «        D ](}t          ||         t          ¦  «        r|dz  }| ||<   Œ)|                     ||| j        ¦  «        }|	r6 |j        g |¢|                     ¦   «         t%          |¦  «        d …         ¢R Ž }|S )Nr   )r   ÚDimensionBindErrorr^   Fc              3   ó$   K  — | ]}|j         V — Œd S r   r7   ©r    Úes     r   r!   zpositional.<locals>.<genexpr>   s$   è è € Ð*Ð* 1˜œÐ*Ð*Ð*Ð*Ð*Ð*r   c              3   ó$   K  — | ]}|j         V — Œd S r   r7   r¡   s     r   r!   zpositional.<locals>.<genexpr>
  s$   è è € Ð/Ð/¨˜QœVÐ/Ð/Ð/Ð/Ð/Ð/r   Tztensor of dimensions z does not contain dim r   éÿÿÿÿ)r   r   rŸ   r^   rH   rI   rJ   rM   r   ÚDimListÚextendrR   r-   r"   r   r   rT   rL   r:   r9   rQ   rS   rŽ   r`   rU   ra   rK   Úreshape)rb   rŽ   r   rŸ   r^   rd   re   Ú	flat_dimsrV   Ú
needs_viewrM   r   rU   r*   r?   r¢   ÚpÚseenrœ   s                      r   Ú
positionalr¬   õ   s  € Ø1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1à”l¥E¨$¬,Ñ$7Ô$7ˆV€GÝ‘”€IØ€DØ€JØŒ9€DØð ñ ˆÝ�a�Ñ!Ô!ð 	Ø×Ò˜QÑÔÐØ�KŠKÐ*Ð*¨Ð*Ñ*Ô*Ñ*Ô*Ð*Ð*Ý˜˜3ÑÔð 
	Ø×Ò˜QÑÔÐØ�KŠK˜œÑÔÐÐÝ˜�3ÑÔð 	Ý˜!˜T 5Ñ)Ô)ˆAØ×Ò˜QÑÔÐØ�KŠK˜Ÿš Q™œÑ(Ô(Ð(Ð(à×Ò˜QÑÔÐØ�KŠK�Ð/Ð/¨QÐ/Ñ/Ô/Ñ/Ô/Ñ0Ô0Ð0ØˆJ‰Jå•5�˜V™œÑ%Ô%Ñ&Ô&€GÝ˜)Ñ$Ô$ð ð ‰ˆˆ1ð	Ø—,’,˜q‘/”/ˆCˆCøÝð 	ð 	ð 	Ø$Ð$ØL¨¬	ÐLÐLÈÐLÐLñô àðøøøøð	øøøð �CŒLˆØ�3ˆKØ�CˆLØ�Š�a˜ÑÔÐØ�Š�q˜!ÑÔÐÐØˆgŒo˜wÐ'€GØ€DÝ•3�v‘;”; ‘? B¨Ñ+Ô+ð ð ˆÝ�f˜Q”i¥Ñ%Ô%ð 	Ø�A‰IˆDØ˜ˆF�1‰IøØ×#Ò# G¨V°TÔ5EÑFÔF€FØð IØ�”ÐH ÐH¨¯ª©¬µc¸)±n´nÐ6FÐ6FÔ(GÐHÐHÐHˆØ€Ms   Æ5GÇ
G1ÇG,Ç,G1c                 óB   — ddl m} | D ]}t          ||¦  «        r dS Œd S )Nr   r   Tr   )Úinputr   r*   s      r   Ú_contains_dimr¯   &  sK   € ØÐÐÐÐÐàð ð ˆÝ�a˜ÑÔð 	Ø�4�4ð	ðð r   c                 óÌ   — t          |¦  «        s*|                      t          j        j        d | g|¢R ¦  «        S |}d„ |D ¦   «         dg| j        z  z   } | j        |Ž } | |         S )Nc                 ó   — g | ]	}|j         ‘Œ
S ru   r7   ©r    r   s     r   ú
<listcomp>zexpand.<locals>.<listcomp>2  s   € Ð"Ð"Ð"˜ˆQŒVÐ"Ð"Ð"r   r¤   )r¯   r�   rŒ   r^   r_   rM   )rb   ÚsizesrŽ   s      r   r_   r_   .  sv   € Ý˜ÑÔð RØ×&Ò&¥u¤|Ô':¸DÀ4À.È%À.À.ÑQÔQÐQØ€DØ"Ð"˜TÐ"Ñ"Ô" b T¨D¬IÑ%5Ñ5€EØˆ4Œ;˜Ð€DØ�Œ:Ðr   c                 ód   — t          |¦  «        |k    r||         S |                     | |¦  «        S r   )r:   Úget)ÚnameÚoffsetr“   r”   Údefaults        r   Ú_getargrº   :  s1   € Ý
ˆ4�y„y�6ÒÐØ�FŒ|ÐØ�:Š:�d˜GÑ$Ô$Ð$r   c                 óD   — t          |¦  «        |k    r|||<   d S ||| <   d S r   )r:   )r·   r¸   r“   r”   Úvalues        r   Ú	_patchargr½   @  s-   € Ý
ˆ4�y„y�6ÒÐØˆˆV‰ˆˆàˆˆt‰ˆˆr   r   Tc           	      óF   ‡ ‡‡‡‡‡‡‡‡	— ddl mŠmŠmŠ	 ˆˆˆ	ˆˆˆˆ ˆˆf	d„}|S )Nr   )r   r^   r{   c                 ó’  •	‡ ‡	‡
‡— t          ‰‰||t          ¦  «        }|t          u s‰rxt          |‰¦  «        sht          ‰ j        ¦  «        5  t          d‰› �¦  «         ‰                      ‰‰ j        g|¢R i |¤Ž‰ j        ¦  «        cd d d ¦  «         S # 1 swxY w Y   ‰rt          d‰||d¦  «        nd}‰ j	        t          ‰ j        ¦  «        c}Š
t          |‰ j        j        |‰¦  «        }t          ˆ
fd„|D ¦   «         ¦  «        Š	‰r|sˆ	fd„t          ‰
¦  «        D ¦   «         Šn‰
Št!          ‰	¦  «        dk    r‰	d         Š	t#          |¦  «        }t%          ‰‰||‰	¦  «         ˆˆˆˆ fd„}t          ‰¦  «        5  t          d	‰› �¦  «          ‰|g|¢R i |¤Ž}t'          ||¦  «        cd d d ¦  «         S # 1 swxY w Y   d S )
Nzdim fallback batch_tensor for r   Fc              3   óB   •K  — | ]}‰                      |¦  «        V — Œd S r   ©rQ   )r    r   re   s     €r   r!   z$_wrap.<locals>.fn.<locals>.<genexpr>Y  s-   øè è € Ð:Ð:°˜FŸLšL¨™OœOÐ:Ð:Ð:Ð:Ð:Ð:r   c                 ó"   •— g | ]\  }}|‰v¯	|‘ŒS ru   ru   )r    r*   r›   Údim_indicess      €r   r³   z%_wrap.<locals>.fn.<locals>.<listcomp>[  s'   ø€ ÐRÐRÐR¡  1¸QÀkÐ=QÐ=Q˜!Ð=QÐ=QÐ=Qr   r   r   c                 ó`   •— t          | ‰¦  «        r‰                     | ‰‰j        ¦  «        S | S r   )r   ra   rK   )r[   r^   r{   Ú
new_levelsrb   s    €€€€r   r†   z_wrap.<locals>.fn.<locals>.wrapf  s6   ø€ Ý˜!˜ZÑ(Ô(ð OØ×-Ò-¨a°¸TÔ=MÑNÔNÐNØˆHr   zdim used batch_tensor for )rº   Ú_not_presentr   r   rŽ   r�   rˆ   r€   rK   rH   rI   rJ   r%   rM   r8   r9   r:   rT   r½   r	   )rb   r“   r”   r   r   r[   rŽ   r†   r+   rÃ   re   rÅ   r   r^   r{   Údim_nameÚ
dim_offsetÚkeepdim_offsetr‘   r
   r$   s   `        @@@€€€€€€€€€r   Úfnz_wrap.<locals>.fnL  sÈ  øøøøø€ Ý�h 
¨D°&½,ÑGÔGˆØ•,ÐÐ :ÐµjÀÀcÑ6JÔ6JÐÝ ¤	Ñ*Ô*ð ð ÝÐ=°tÐ=Ð=Ñ>Ô>Ð>Ø×*Ò*Ø�D˜Ô*Ð<¨TÐ<Ð<Ð<°VÐ<Ð<¸dÔ>Nñô ðð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð HNÐX�G�I˜~¨t°V¸UÑCÔCÐCÐSXð 	ð ”L¥%¨¬Ñ"5Ô"5ˆ	ˆˆ6Ý�S˜$Ô+Ô0°'¸:ÑFÔFˆÝÐ:Ð:Ð:Ð:°TÐ:Ñ:Ô:Ñ:Ô:ˆØð 	 ˜'ð 	 ØRÐRÐRÐR­	°&Ñ(9Ô(9ÐRÑRÔRˆJˆJàˆJåˆ{ÑÔ˜qÒ Ð Ø%ØôˆKõ �D‰zŒzˆÝ�(˜J¨¨f°kÑBÔBÐBð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	õ
 ˜JÑ'Ô'ð 	%ð 	%ÝÐ5¨tÐ5Ð5Ñ6Ô6Ð6Ø��QÐ(˜Ð(Ð(Ð( Ð(Ð(ˆAÝ˜D !Ñ$Ô$ð	%ð 	%ð 	%ð 	%ñ 	%ô 	%ð 	%ð 	%ð 	%ð 	%ð 	%ð 	%øøøð 	%ð 	%ð 	%ð 	%ð 	%ð 	%s$   Á<BÂBÂBÆ.F<Æ<G ÇG )r   r   r^   r{   )
r‘   rÈ   rÉ   rÇ   r$   r
   rÊ   r   r^   r{   s
   `````` @@@r   Ú_wraprË   G  st   øøøøøøøøø€ ð *Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ð)ð"%ð "%ð "%ð "%ð "%ð "%ð "%ð "%ð "%ð "%ð "%ð "%ð "%ðH €Ir   c           	      ó„   — ddl m} t          t          j        | ¦  «        }t          || t          |g|¢R i |¤Ž¦  «         d S )Nr   rF   )r   rG   ÚgetattrrŒ   r^   ÚsetattrrË   )r·   r“   r”   rG   r‘   s        r   Ú_defrÏ   s  sU   € ØÐÐÐÐÐå•5”< Ñ&Ô&€DÝˆG�T�5 Ð7¨Ð7Ð7Ð7°Ð7Ð7Ñ8Ô8Ð8Ð8Ð8r   c                   ó"   — e Zd Zdd„Zd„ Zd„ ZdS )Údim_trackerÚreturnNc                 ó:   — t          ¦   «         | _        g | _        d S r   )rI   rŽ   Úcount)rb   s    r   Ú__init__zdim_tracker.__init__€  s   € Ý‘G”GˆŒ	ØˆŒ
ˆ
ˆ
r   c                 ó„   — || j         vr6| j                              |¦  «         | j                             d¦  «         d S d S r   )rŽ   rR   rÔ   ©rb   r   s     r   Úrecordzdim_tracker.record„  sI   € Ø�D”IÐÐØŒI×Ò˜QÑÔÐØŒJ×Ò˜aÑ Ô Ð Ð Ð ð Ðr   c                 óL   — | j         | j                             |¦  «                 S r   )rÔ   rŽ   rQ   r×   s     r   Ú__getitem__zdim_tracker.__getitem__‰  s   € ØŒz˜$œ)Ÿ/š/¨!Ñ,Ô,Ô-Ð-r   )rÒ   N)rr   rs   rt   rÕ   rØ   rÚ   ru   r   r   rÑ   rÑ     sF   € € € € € ðð ð ð ð!ð !ð !ð
.ð .ð .ð .ð .r   rÑ   c                 ó4  ‡*‡+‡,— ddl mŠ*m}m}m}m}m} t          ||¦  «         o8t          |t          t          f¦  «         ot          ||¦  «        o
|j
        dk     }|r>t          | ‰*¦  «        r‰*                     t          d | |f¦  «        S t          | |¦  «        S t          |t          ¦  «        s|g}nt          |¦  «        }d}d }	g }
t          |¦  «        D ]ƒ\  }}|du st          ||¦  «        r|j        s|	�d|› d|	› �} ||¦  «        ‚|}	t          ||¦  «        r1||j        rt          |¦  «        ndz  }|
                     |¦  «         Œx|�	|dur|dz  }Œ„| j
        }||k    rt#          d|› d|› d	�¦  «        ‚|	�:||z
  }||	         }|du rt$          g|z  ||	|	dz   …<   n|                     |¦  «         t)          |
¦  «        D ]}||         |||dz   …<   Œd}d
}|                      ¦   «         }g }t-          ¦   «         Š+ˆ*ˆ+fd„} || ¦  «         g }t          |¦  «        D �]2\  }}|€"t$          ||<   |                     d¦  «         d}Œ*||         }t          ||¦  «        r2||_        ‰+                     |¦  «         |                     |¦  «         n¹t          |t          t          f¦  «        r}|r{t          |d         |¦  «        re|D ]}‰+                     |¦  «         Œt1          ||d|› �¦  «         |                     d„ |D ¦   «         ¦  «         d}|                     |¦  «         n  ||¦  «         |                     |¦  «         |dz  }�Œ4|r
 | j        |Ž } t)          |¦  «        D ]}||         |||dz   …<   Œt          | ‰*¦  «        rB| j        t          | j        ¦  «        }}t;          |¦  «        Š,ˆ,fd„|D ¦   «         }| j        }d}n| |}}|j
        t          |¦  «        z
  }d}g }g }d } i }!d
}"t          |¦  «        D ]·\  }}#t          |#|¦  «        r,‰+|#         dk    r t$          ||<   |                     |#¦  «         ŒAt          |#|¦  «        rOd}"| €t          |¦  «        } t?          |#¦  «        \  }$}}%||!|<   |$||<   |D ]}&|&|vr|                     |&¦  «         ŒŒ d}"|                     d¦  «         Œ¸| �||| | …<   |!                      ¦   «         D ]\  }}tC          ||         ||¦  «        ||<   Œ |"rt          ||¦  «        }'n|}'d}(|dk    r|                     dg|z  ¦  «         t          t)          |¦  «        ¦  «        D ]'\  }})t          |)tD          ¦  «        r|(|d|z
  <   |(dz  }(Œ(| #                    |'||¦  «        S )Nr   )rG   r   rŸ   r¥   r^   r{   r   .z\at most one ... or unbound dimension list can exist in indexing list but found 2 at offsets z and z	at least z/ indices were supplied but the tensor only has z dimensions.Fc                 ój   •— t          | ‰¦  «        sd S | j        D ]}‰                     |¦  «         Œd S r   )r   rŽ   rØ   )r[   r   rG   Ú	dims_seens     €€r   Úadd_dimszt__getitem__.<locals>.add_dimsÙ  sL   ø€ Ý˜!˜WÑ%Ô%ð 	ØˆFØ”ð 	 ð 	 ˆAØ×Ò˜QÑÔÐÐð	 ð 	 r   Tzoffset c              3   ó$   K  — | ]}|j         V — Œd S r   r7   r²   s     r   r!   zt__getitem__.<locals>.<genexpr>ð  s$   è è € Ð!6Ð!6¨Q !¤&Ð!6Ð!6Ð!6Ð!6Ð!6Ð!6r   c                 ó\   •— g | ](}t          |t          ¦  «        rt          ‰¦  «        n|‘Œ)S ru   )r   r"   Únext)r    r›   Úinput_its     €r   r³   z t__getitem__.<locals>.<listcomp>
  s2   ø€ ÐSÐSÐSÀq­°AµsÑ);Ô);ÐB•t˜H‘~”~�~ÀÐSÐSÐSr   r¤   )$r   rG   r   rŸ   r¥   r^   r{   r   r8   rT   rM   r�   Ú_orig_getitemr9   r)   r:   rR   Ú
IndexErrorÚno_sliceÚbind_lenÚreversedr-   rÑ   rØ   rD   r¦   rV   rH   rJ   ÚiterrK   rO   Úitemsr\   r"   ra   )-rb   r®   r   rŸ   r¥   r^   r{   Ú	is_simpleÚdims_indexedÚexpanding_objectÚdimlistsr*   ÚsÚmsgrM   Úexpanding_ndimsÚobjrZ   r-   Ú
view_sizesrÞ   Ú	dim_packsr?   Úszr   Úptensor_selfre   Úflat_inputsÚ
has_deviceÚto_padr…   Úindex_levelsÚtensor_insert_pointr™   Úrequires_getindexrN   rd   rš   r›   rœ   Únext_positionalr+   rG   rÝ   râ   s-                                             @@@r   Út__getitem__rý   �  sP  øøø€ ØOÐOÐOÐOÐOÐOÐOÐOÐOÐOÐOÐOÐOÐOÐOÐOõ �u˜cÑ"Ô"Ð"ð 	@Ý˜5¥5­$ -Ñ0Ô0Ð0ð	@õ ˜˜zÑ*Ô*Ð>¨u¬z¸QªÐ?ð ð ð .Ý�d˜GÑ$Ô$ð 	.Ø×-Ò-­m¸TÀDÈ%À=ÑQÔQÐQå   uÑ-Ô-Ð-õ �e�UÑ#Ô#ð Ø�ˆˆå�U‘”ˆà€LØÐØ€HÝ˜%Ñ Ô ð ð ‰ˆˆ1Ø�ˆ8ˆ8•z ! WÑ-Ô-ˆ8°a´jˆ8ØÐ+ðFØ+,ðFð FØ3CðFð Fð ð )Ð(¨Ñ-Ô-Ð-Ø Ðå�a˜Ñ!Ô!ð 	Ø a¤jÐ7�C ™FœF˜F°aÑ7ˆLØ�OŠO˜AÑÔÐÐØˆ]˜q¨˜|˜|Ø˜AÑˆLøàŒ9€DØ�dÒÐÝØg˜ÐgÐgÐUYÐgÐgÐgñ
ô 
ð 	
ð Ð#Ø Ñ-ˆØÐ$Ô%ˆØ�#ˆ:ˆ:åð>àñ> ˆEÐ"Ð%5¸Ñ%9Ð9Ñ:Ð:ð �LŠL˜Ñ)Ô)Ð)å�hÑÔð $ð $ˆØ  œ8ˆˆa�!�a‘%ˆiÑÐØ€LØ€MØ�9Š9‰;Œ;€DØ€JÝ‘”€Ið ð  ð  ð  ð  ð  ð €HˆT�N„N€NØ€IÝ˜EÑ"Ô"ð ñ ‰ˆˆ3Øˆ;ÝˆE�!‰HØ×Ò˜aÑ Ô Ð Ø ˆMˆMà�lÔ#ˆBÝ˜#˜sÑ#Ô#ð &Ø�”Ø× Ò  Ñ%Ô%Ð%Ø×!Ò! "Ñ%Ô%Ð%Ð%Ý˜C¥%­ Ñ/Ô/ð 	&°Cð 	&½JÀsÈ1ÄvÈsÑ<SÔ<Sð 	&Øð *ð *�AØ×$Ò$ SÑ)Ô)Ð)Ð)Ý" 2 s¨M°a¨M¨MÑ:Ô:Ð:Ø×!Ò!Ð!6Ð!6°#Ð!6Ñ!6Ô!6Ñ6Ô6Ð6Ø $�Ø× Ò  Ñ#Ô#Ð#Ð#à�˜‘”�Ø×!Ò! "Ñ%Ô%Ð%Ø˜AÑˆL‰LØð &ØˆtŒy˜*Ð%ˆÝ�iÑ Ô ð $ð $ˆØ  œ8ˆˆa�!�a‘%ˆiÑÐõ �$˜Ñ Ô ð 
Ø#œ|­T°$´,Ñ-?Ô-?�fˆå˜‘;”;ˆØSÐSÐSÐSÈFÐSÑSÔSˆØÔ%ˆ
Øˆˆà$(¨%�kˆØÔ"¥S¨Ñ%5Ô%5Ñ5ˆØˆ
à€MØ€LØÐØ€IØÐÝ˜KÑ(Ô(ð $ð $‰ˆˆ3Ý�c˜3ÑÔð 	$ I¨c¤N°aÒ$7Ð$7Ý%ˆK˜‰NØ× Ò  Ñ%Ô%Ð%Ð%Ý˜˜ZÑ(Ô(ð 	$Ø $ÐØ"Ð*Ý&)¨-Ñ&8Ô&8Ð#Ý!/°Ñ!4Ô!4ÑˆG�V˜QØ!ˆI�a‰LØ$ˆK˜‰NØð +ð +�Ø˜LÐ(Ð(Ø ×'Ò'¨Ñ*Ô*Ð*øð+ð !%ÐØ× Ò  Ñ#Ô#Ð#Ð#àÐ&ØAMˆÐ)Ð*=Ð=Ñ>à—_’_Ñ&Ô&ð Mð M‰	ˆˆ6Ý& {°1¤~°v¸|ÑLÔLˆ�A‰ˆàð Ý˜|¨[Ñ9Ô9ˆˆàˆà€OØ�‚z€zØ×Ò˜a˜S 6™\Ñ*Ô*Ð*Ý�( =Ñ1Ô1Ñ2Ô2ð !ð !‰ˆˆ1Ý�a�ÑÔð 	!Ø$3ˆM˜"˜q™&Ñ!Ø˜qÑ ˆOøà×!Ò! &¨-¸ÑDÔDÐDr   c                 ó¾  — t          |t          ¦  «        r*t          j        | ||¦  «                             ||¦  «        S d }|�t          ||d¬¦  «        \  }}g }| D ]M}t          ||d¬¦  «        \  }}|�||k    r|                     ||¦  «        }n|}|                     |¦  «         ŒNt          j        |||¬¦  «        }	|	                     ||dz   f||f¦  «        S )NT)rc   )Úoutr   )r   r"   rŒ   ÚstackrQ   rg   Úmove_dimrR   )
ÚtensorsÚnew_dimr   rÿ   rQ   Úptensorsr[   ÚptÚpiÚprs
             r   r   r   @  sû   € Ý�#•sÑÔð BÝŒ{˜7 C¨Ñ-Ô-×3Ò3°C¸ÑAÔAÐAØ€EØ
€Ý+¨C°ÀÐFÑFÔF‰
ˆˆUØ€HØð ð ˆÝ'¨¨3¸4Ð@Ñ@Ô@‰ˆˆBØÐ  u¢ Ø—’˜R Ñ'Ô'ˆBˆBàˆEØ�Š˜ÑÔÐÐÝ	Œ�X˜u¨#Ð	.Ñ	.Ô	.€BØ�8Š8�U˜E A™IÐ&¨°#¨Ñ7Ô7Ð7r   c                 óÈ  ‡— ddl m}m} t          |t          ¦  «        st          d„ |D ¦   «         ¦  «        r1t          ‰|¦  «        rt          d¦  «        ‚t          | |‰¬¦  «        S t          ‰|¦  «        r0t          | |¦  «        sJ d‰› �¦   «         ‚t          | ‰¦  «        \  } Š|  	                    ‰¦  «        }d}g }g }t          |¦  «        D ][\  }	}
|
j        r%|                     |
j	        ¦  «         ||
j	        z  }Œ1|                     d¦  «         |                     |	¦  «         Œ\|r`||k    sJ d|› d	|› d
|› d�¦   «         ‚||z
  }| t          |¦  «        z   }|D ])}t          ||¦  «        }|||         _	        |||<   ||z  }Œ*n||k    sJ d|› d	|› d
|› d�¦   «         ‚t          ˆfd„t!          |t          | |‰¬¦  «        ¦  «        D ¦   «         ¦  «        S )Nr   )rG   r   c              3   ó@   K  — | ]}t          |t          ¦  «        V — Œd S r   )r   r"   )r    r[   s     r   r!   zsplit.<locals>.<genexpr>X  s=   è è € ð 6ð 6Ø �
�1•cÑÔð6ð 6ð 6ð 6ð 6ð 6r   zKwhen dim is specified as a Dim object, split sizes must also be dimensions.r   zTensor does not have dimension r   z,result dimensions are larger than original: r4   z (ú)z)result dimensions do not match original: c              3   óJ   •K  — | ]\  }}|                      ‰|¦  «        V — Œd S r   rÁ   )r    r   r[   r   s      €r   r!   zsplit.<locals>.<genexpr>€  sG   øè è € ð ð áˆAˆqð 	
�Š��Q‰Œðð ð ð ð ð r   )r   rG   r   r   r"   ÚanyrS   Ú_orig_splitrg   r-   r9   r)   rR   r:   Úminr8   Úzip)rb   Úsplit_size_or_sectionsr   rG   r   r-   Útotal_bound_sizeÚunboundr´   r*   r   Úremaining_sizeÚ
chunk_sizeÚurô   s     `            r   Úsplitr  U  s­  ø€ ØÐÐÐÐÐÐÐåÐ(­#Ñ.Ô.ð Bµ#ð 6ð 6Ø$:ð6ñ 6ô 6ñ 3ô 3ð Bõ �c˜3ÑÔð 	ÝØ]ñô ð õ ˜4Ð!7¸SÐAÑAÔAÐAå�#�sÑÔð 6Ý˜$ Ñ(Ô(ÐQÐQÐ*QÈCÐ*QÐ*QÑQÔQÐ(Ý*¨4°Ñ5Ô5‰	ˆˆcà�9Š9�S‰>Œ>€DØÐØ€GØ€EÝÐ0Ñ1Ô1ð ð ‰ˆˆ1ØŒ:ð 	Ø�LŠL˜œÑ Ô Ð Ø ¤Ñ&ÐÐà�LŠL˜‰OŒOˆOØ�NŠN˜1ÑÔÐÐàð oà Ò$Ð$Ð$ØqÐ:JÐqÐqÐPTÐqÐqÐXnÐqÐqÐqñ %Ô$Ð$àÐ 0Ñ0ˆØ&�­#¨g©,¬,Ñ6Ð7ˆ
Øð 	!ð 	!ˆAÝ�Z Ñ0Ô0ˆBØ-/Ð" 1Ô%Ô*ØˆE�!‰HØ˜bÑ ˆNˆNð		!ð  Ò$Ð$Ð$ØnÐ7GÐnÐnÈTÐnÐnÐUkÐnÐnÐnñ %Ô$Ð$åð ð ð ð åÐ.µ¸DÀ%ÈSÐ0QÑ0QÔ0QÑRÔRðñ ô ñ ô ð r   )F)r   r   r   FT)r   N)r   )3rŒ   Úfunctorch._Cr   Ú_Cr   r   Úbatch_tensorr   r	   r   r¥   r   Ú	functoolsr
   Úsetr�   r   r   r%   rD   rO   r\   rg   rk   rm   rT   rI   r8   r#   Ú
empty_dictÚclassmethodr�   r¬   r¯   r_   ÚobjectrÆ   rº   r½   rË   rÏ   Úslicerå   r^   rÚ   rã   rÑ   rý   r   r  r  ru   r   r   ú<module>r      sß  ðð €€€Ø "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ð Ð Ø (Ð (Ð (Ð (Ð (Ð (Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,ð Œ*€Ø €€€Ø Ð Ð Ð Ð Ð ð ˆC�Ô'Ñ(Ô(€	ð&ð &ð &ð	ð 	ð 	ð7ð 7ð 7ðð ð ð65ð 5ð 5ðð ð ð.Rð Rð Rð Rð*ð ð ðð ð ð ð ñ ô ð ð	ð 	ð 	ð 	ð 	ˆD�$ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	ˆT�5ñ 	ô 	ð 	ð €
ð Ø5?ð K*ð K*ð K*ñ „ðK*ð\.ð .ð .ðbð ð ðð ð ð ˆv‰xŒx€ð%ð %ð %ðð ð ð TXð)ð )ð )ð )ðX9ð 9ð 9ð ˆ5�‰;Œ;€à”Ô(€ð.ð .ð .ð .ð .ñ .ô .ð .ðoEð oEð oEðf8ð 8ð 8ð 8ð$ ŒlÔ €ð.ð .ð .ð .ð .ð .r   