§
    ž²Åjí%  ã                   ó*  — d dl Z d dlmZmZmZmZmZmZ d dlm	Z	 d dl
Z
d dl
mZ d dlmZmZmZ eeef         Zeeeedf         f         Zdeee                  ded	efd
„Zdeeeedf         f         d	efd„Zdededeg ef         d	efd„Zdedededed	eeef         f
d„Z	 d#deeeedf         f         dededededed	efd„Zdeded	dfd„Zdeded	dfd„Zdefd„Z e	de¬ ¦  «        d$dededed	efd!„¦   «         Z	 	 	 d%dedededed	ef
d"„ZdS )&é    N)ÚAnyÚCallableÚListÚOptionalÚTupleÚUnion)Ú
deprecated)ÚTensor)Ú_broadcast_to_and_flattenÚtree_flattenÚtree_unflatten.Úflat_in_dimsÚ	flat_argsÚreturnc                 ó¨   ‡— d„ t          | |¦  «        D ¦   «         Š‰r.t          ˆfd„‰D ¦   «         ¦  «        rt          d‰› d�¦  «        ‚‰d         S )Nc                 óB   — g | ]\  }}|®|                      |¦  «        ‘ŒS ©N)Úsize)Ú.0Úin_dimÚargs      úFC:\Projects\Historical\venv\Lib\site-packages\torch/_vmap_internals.pyú
<listcomp>z0_validate_and_get_batch_size.<locals>.<listcomp>   s8   € ð ð ð áˆF�CØÐð 	�Š�ÑÔàÐÐó    c              3   ó0   •K  — | ]}|‰d          k    V — ŒdS )r   N© )r   r   Úbatch_sizess     €r   ú	<genexpr>z/_validate_and_get_batch_size.<locals>.<genexpr>   s,   øè è € ÐJÐJ°d˜4 ;¨q¤>Ò1ÐJÐJÐJÐJÐJÐJr   zTvmap: Expected all tensors to have the same size in the mapped dimension, got sizes z for the mapped dimensionr   )ÚzipÚanyÚ
ValueError)r   r   r   s     @r   Ú_validate_and_get_batch_sizer"      s’   ø€ ðð å˜|¨YÑ7Ô7ðñ ô €Kð
 ð 
•sÐJÐJÐJÐJ¸kÐJÑJÔJÑJÔJð 
ÝðKØ$/ðKð Kð Kñ
ô 
ð 	
ð �qŒ>Ðr   Úbatched_outputsc                 óN   — t          | t          ¦  «        rt          | ¦  «        S dS )Né   )Ú
isinstanceÚtupleÚlen)r#   s    r   Ú_num_outputsr)   !   s'   € Ý�/¥5Ñ)Ô)ð $Ý�?Ñ#Ô#Ð#Øˆ1r   ÚvalueÚnum_elementsÚerror_message_lambdac                 ó�   — t          | t          ¦  «        s| f|z  S t          | ¦  «        |k    rt           |¦   «         ¦  «        ‚| S r   )r&   r'   r(   r!   )r*   r+   r,   s      r   Ú	_as_tupler.   )   sQ   € õ
 �e�UÑ#Ô#ð 'Øˆx˜,Ñ&Ð&Ý
ˆ5�z„z�\Ò!Ð!ÝÐ-Ð-Ñ/Ô/Ñ0Ô0Ð0Ø€Lr   Úin_dimsÚargsÚ
vmap_levelÚfuncc                 óª  ‡— t          | t          ¦  «        sHt          | t          ¦  «        s3t          dt	          |¦  «        › d| › dt          | ¦  «        › d�¦  «        ‚t          |¦  «        dk    r t          dt	          |¦  «        › d�¦  «        ‚t          |¦  «        \  }}t          | |¦  «        }|€<t          dt	          |¦  «        › d| › dt          | ¦  «        d         › d	|› d�	¦  «        ‚t          ||¦  «        D �]\  }}t          |t          ¦  «        s(|�&t          dt	          |¦  «        › d| › d
|› d�¦  «        ‚t          |t          ¦  «        rKt          |t          ¦  «        s6t          dt	          |¦  «        › d| › d
|› dt          |¦  «        › d�	¦  «        ‚|�n|dk     s||                     ¦   «         k    rPt          dt	          |¦  «        › d| › d
|› d|                     ¦   «         › d|                     ¦   «         › d�¦  «        ‚�Œt          ||¦  «        }	ˆfd„t          ||¦  «        D ¦   «         }
t          |
|¦  «        |	fS )Núvmap(z
, in_dims=zv, ...)(<inputs>): expected `in_dims` to be int or a (potentially nested) tuple matching the structure of inputs, got: ú.r   z�)(<inputs>): got no inputs. Maybe you forgot to add inputs, or you are trying to vmap over a function with no inputs. The latter is unsupported.zb, ...)(<inputs>): in_dims is not compatible with the structure of `inputs`. in_dims has structure r%   z but inputs has structure z, ...)(<inputs>): Got in_dim=zE for an input but in_dim must be either an integer dimension or None.z' for an input but the input is of type zT. We cannot vmap over non-Tensor arguments, please use None as the respective in_dimz> for some input, but that input is a Tensor of dimensionality z- so expected in_dim to satisfy 0 <= in_dim < c                 óJ   •— g | ]\  }}|€|nt          j        ||‰¦  «        ‘Œ S r   )ÚtorchÚ_add_batch_dim)r   r   r   r1   s      €r   r   z*_create_batched_inputs.<locals>.<listcomp>l   sD   ø€ ð ð ð áˆF�Cð ˆ~ˆˆ¥5Ô#7¸¸VÀZÑ#PÔ#Pðð ð r   )r&   Úintr'   r!   Ú	_get_nameÚtyper(   r   r   r   r
   Údimr"   r   )r/   r0   r1   r2   r   Ú	args_specr   r   r   Ú
batch_sizeÚbatched_inputss     `        r   Ú_create_batched_inputsr@   7   s4  ø€ õ �g�sÑ#Ô#ð 
­J°wÅÑ,FÔ,Fð 
ÝðG•I˜d‘O”Oð Gð G¨wð Gð Gå6:¸7±m´mðGð Gð Gñ
ô 
ð 	
õ
 ˆ4�y„y�A‚~€~Ýð*•I˜d‘O”Oð *ð *ð *ñ
ô 
ð 	
õ (¨Ñ-Ô-Ñ€IˆyÝ,¨W°iÑ@Ô@€LØÐÝð*•I˜d‘O”Oð *ð *¨wð *ð *å%1°'Ñ%:Ô%:¸1Ô%=ð*ð *ð 'ð*ð *ð *ñ
ô 
ð 	
õ ˜9 lÑ3Ô3ð ñ ‰ˆˆVÝ˜&¥#Ñ&Ô&ð 	¨6Ð+=Ýð1�	 $™œð 1ð 1°7ð 1ð 1Ø$ð1ð 1ð 1ñô ð õ
 �f�cÑ"Ô"ð 	­:°c½6Ñ+BÔ+Bð 	Ýð<�	 $™œð <ð <°7ð <ð <Ø$ð<ð <å˜‘9”9ð<ð <ð <ñô ð ð Ð 6¨A¢: :°¸3¿7º7¹9¼9Ò1DÐ1DÝð.�	 $™œð .ð .°7ð .ð .Ø$ð.ð .à%(§W¢W¡Y¤Yð.ð .ð "%§¢¡¤ð.ð .ð .ñô ð ùõ .¨l¸IÑFÔF€Jðð ð ð å˜|¨YÑ7Ô7ðñ ô €Nõ ˜.¨)Ñ4Ô4°jÐ@Ð@r   FÚout_dimsr>   Úallow_none_pass_throughc                 ój  ‡‡‡‡‡— t          | ¦  «        Št          ‰‰ˆˆˆfd„¦  «        }t          | t          ¦  «        r|d         }t	          j        | ‰‰|¦  «        S |r*t          ˆˆfd„t          | |¦  «        D ¦   «         ¦  «        S t          ˆˆfd„t          | |¦  «        D ¦   «         ¦  «        S )Nc            
      óV   •— dt          ‰ ¦  «        › d‰› d‰› dt          ‰ ¦  «        › d�	S )Nr4   ú, ..., out_dims=z0): `out_dims` must have one dim per output (got z outputs) of r5   )r:   )r2   Únum_outputsrA   s   €€€r   ú<lambda>z!_unwrap_batched.<locals>.<lambda>€   sW   ø€ ð U�	 $™œð Uð U¸ð Uð UØ(3ðUð UÝBKÈDÁ/Ä/ðUð Uð U€ r   r   c              3   óT   •K  — | ]"\  }}|�t          j        |‰‰|¦  «        nd V — Œ#d S r   ©r7   Ú_remove_batch_dim©r   ÚoutÚout_dimr>   r1   s      €€r   r   z"_unwrap_batched.<locals>.<genexpr>‹   s[   øè è € ð 
ð 
ñ ��Wð �?õ Ô'¨¨Z¸ÀWÑMÔMÐMàð	
ð 
ð 
ð 
ð 
ð 
r   c              3   óL   •K  — | ]\  }}t          j        |‰‰|¦  «        V — Œd S r   rI   rK   s      €€r   r   z"_unwrap_batched.<locals>.<genexpr>”   sL   øè è € ð 
ð 
á��Wõ Ô# C¨°ZÀÑIÔIð
ð 
ð 
ð 
ð 
ð 
r   )r)   r.   r&   r
   r7   rJ   r'   r   )	r#   rA   r1   r>   r2   rB   Úout_dims_as_tuplerM   rF   s	    ````   @r   Ú_unwrap_batchedrP   t   s#  øøøøø€ õ ˜Ñ/Ô/€KÝ!ØØð	Uð 	Uð 	Uð 	Uð 	Uð 	Uñô Ðõ �/¥6Ñ*Ô*ð YØ# AÔ&ˆÝÔ& ¸
ÀJÐPWÑXÔXÐXØð 
Ýð 
ð 
ð 
ð 
ð 
õ !$ OÐ5FÑ GÔ Gð
ñ 
ô 
ñ 
ô 
ð 	
õ ð 
ð 
ð 
ð 
ð 
å # OÐ5FÑ GÔ Gð
ñ 
ô 
ñ 
ô 
ð 	
r   Úoutputsc                 ó¸  — t          | t          ¦  «        rd S t          | t          ¦  «        s@t          dt	          |¦  «        › dt	          |¦  «        › dt          | ¦  «        › d�¦  «        ‚t          | ¦  «        D ]]\  }}t          |t          ¦  «        rŒt          dt	          |¦  «        › dt	          |¦  «        › dt          |¦  «        › d|› d�	¦  «        ‚d S )Nr4   z	, ...): `z%` must only return Tensors, got type z as the return.z for return r5   )r&   r
   r'   r!   r:   r;   Ú	enumerate)rQ   r2   ÚidxÚoutputs       r   Ú_validate_outputsrV   ž   s,  € Ý�'�6Ñ"Ô"ð ØˆÝ�g�uÑ%Ô%ð 
Ýð@•I˜d‘O”Oð @ð @­i¸©o¬oð @ð @Ý!% g¡¤ð@ð @ð @ñ
ô 
ð 	
õ ! Ñ)Ô)ð 
ð 
‰ˆˆVÝ�f�fÑ%Ô%ð 	ØÝðB•I˜d‘O”Oð Bð B­i¸©o¬oð Bð BÝ!% f¡¤ðBð BØ;>ðBð Bð Bñ
ô 
ð 	
ð
ð 
r   c                 óÖ   — t          | t          ¦  «        rd S t          | t          ¦  «        rt          d„ | D ¦   «         ¦  «        s#t	          dt          |¦  «        › d| › d�¦  «        ‚d S )Nc              3   ó@   K  — | ]}t          |t          ¦  «        V — Œd S r   )r&   r9   )r   rM   s     r   r   z6_check_out_dims_is_int_or_int_tuple.<locals>.<genexpr>²   s=   è è € ð 2ð 2Ø%,�
�7�CÑ Ô ð2ð 2ð 2ð 2ð 2ð 2r   r4   rE   zu): `out_dims` must be an int or a tuple of int representing where in the outputs the vmapped dimension should appear.)r&   r9   r'   Úallr!   r:   )rA   r2   s     r   Ú#_check_out_dims_is_int_or_int_tuplerZ   ¯   sž   € Ý�(�CÑ Ô ð ØˆÝ�h¥Ñ&Ô&ð 
­cð 2ð 2Ø08ð2ñ 2ô 2ñ /ô /ð 
õ ð0•I˜d‘O”Oð 0ð 0°Xð 0ð 0ð 0ñ
ô 
ð 	
ð
ð 
r   c                 óN   — t          | d¦  «        r| j        S t          | ¦  «        S )NÚ__name__)Úhasattrr\   Úrepr)r2   s    r   r:   r:   ¼   s*   € Ýˆt�ZÑ Ô ð ØŒ}Ðõ
 �‰:Œ:Ðr   z@Please use `torch.vmap` instead of `torch._vmap_internals.vmap`.)Úcategoryc                 ó$   — t          | ||¦  «        S )z4
    Please use torch.vmap instead of this API.
    )Ú_vmap)r2   r/   rA   s      r   Úvmaprb   É   s   € õ ��w Ñ)Ô)Ð)r   c                 óR   ‡ ‡‡‡— t          j        ‰ ¦  «        ˆˆ ˆˆfd„¦   «         }|S )Nc                  óf  •— t          ‰‰¦  «         t          j                             ¦   «         }	 t	          ‰| |‰¦  «        \  }} ‰|Ž }‰st          |‰¦  «         t          |‰||‰‰¬¦  «        t          j                             ¦   «          S # t          j                             ¦   «          w xY w)N)rB   )rZ   r7   Ú_CÚ_vmapmode_increment_nestingr@   rV   rP   Ú_vmapmode_decrement_nesting)	r0   r1   r?   r>   r#   rB   r2   r/   rA   s	        €€€€r   Úwrappedz_vmap.<locals>.wrappedß   sÅ   ø€ å+¨H°dÑ;Ô;Ð;Ý”X×9Ò9Ñ;Ô;ˆ
ð	3Ý)?Ø˜˜z¨4ñ*ô *Ñ&ˆN˜Jð #˜d NÐ3ˆOØ*ð 9Ý! /°4Ñ8Ô8Ð8Ý"ØØØØØØ(?ðñ ô õ ŒH×0Ò0Ñ2Ô2Ð2Ð2ø�EŒH×0Ò0Ñ2Ô2Ð2Ð2øøøs   ±A B Â B0)Ú	functoolsÚwraps)r2   r/   rA   rB   rh   s   ```` r   ra   ra   Õ   sL   øøøø€ õ „_�TÑÔð3ð 3ð 3ð 3ð 3ð 3ð 3ñ Ôð3ð* €Nr   )F)r   r   )r   r   F) ri   Útypingr   r   r   r   r   r   Útyping_extensionsr	   r7   r
   Útorch.utils._pytreer   r   r   r9   Ú	in_dims_tÚ
out_dims_tr"   r)   Ústrr.   r@   ÚboolrP   rV   rZ   r:   ÚFutureWarningrb   ra   r   r   r   ú<module>rs      sN  ðà Ð Ð Ð Ø >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ø (Ð (Ð (Ð (Ð (Ð (à €€€Ø Ð Ð Ð Ð Ð Ø WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ Wð �#�u�*Ô€	Ø�3˜˜c 3˜hœÐ'Ô(€
ðØ�x ”}Ô%ðàðð 	ðð ð ð ð" %¨°°f¸c°kÔ0BÐ(BÔ"Cð Èð ð ð ð ð	Øð	àð	ð # 2 s 7Ô+ð	ð ð		ð 	ð 	ð 	ð9AØð9Aà
ð9Að ð9Að ð	9Að
 ˆ5�#ˆ:Ôð9Að 9Að 9Að 9AðF %*ð#
ð #
Ø˜6 5¨°¨Ô#5Ð5Ô6ð#
àð#
ð ð#
ð ð	#
ð
 ð#
ð "ð#
ð ð#
ð #
ð #
ð #
ðT
˜sð 
¨(ð 
°tð 
ð 
ð 
ð 
ð"

°*ð 

ÀHð 

ÐQUð 

ð 

ð 

ð 

ð�Hð ð ð ð ð €ØFØðñ ô ð*ð *ˆxð * )ð *¸:ð *Èhð *ð *ð *ñ	ô ð*ð ØØ$)ð	 ð  Ø
ð àð ð ð ð "ð	 ð
 ð ð  ð  ð  ð  ð  r   