§
    ž²Åj¥K  ã                   óÖ  — d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZmZm	Z	m
Z
mZmZ d dlZd dlmZ d dlmZmZmZmZmZ d dlmZmZmZmZmZ eeef         Zeeeedf         f         Zd„ 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ee	e         e	e         ef         fd„Z#d	e	e         d
e	e         dedefd„Z$d„ Z%deeeedf         f         dededededefd„Z&d„ Z'dededdfd„Z(defd„Z)d a* ej+        ¦   «         Z,da-d!„ Z.d"„ Z/d#„ Z0d$„ Z1d%„ Z2d&„ Z3d'„ Z4d(„ Z5e j6        d)„ ¦   «         Z7d*„ Z8d+„ Z9d,„ Z:d-„ Z;dS ).é    N)Úpartial)ÚAnyÚCallableÚListÚOptionalÚTupleÚUnion)ÚTensor)Ú_add_batch_dimÚ_remove_batch_dimÚ_vmap_decrement_nestingÚ_vmap_increment_nestingÚis_batchedtensor)Ú_broadcast_to_and_flattenÚtree_flattenÚ	tree_map_Útree_unflattenÚTreeSpec.c                 óN   ‡ ‡— dŠt          j        ‰ ¦  «        ˆ ˆfd„¦   «         }|S )Nzvtorch.func.{grad, vjp, jacrev, hessian} don't yet support saved tensor hooks. Please open an issue with your use case.c                  ó�   •— t           j        j                             ‰¦  «        5   ‰| i |¤Žcd d d ¦  «         S # 1 swxY w Y   d S ©N)ÚtorchÚautogradÚgraphÚdisable_saved_tensors_hooks)ÚargsÚkwargsÚfÚmessages     €€úFC:\Projects\Historical\venv\Lib\site-packages\torch/_functorch/vmap.pyÚfnz.doesnt_support_saved_tensors_hooks.<locals>.fn-   s’   ø€ åŒ^Ô!×=Ò=¸gÑFÔFð 	&ð 	&Ø�1�dÐ%˜fÐ%Ð%ð	&ð 	&ð 	&ð 	&ñ 	&ô 	&ð 	&ð 	&ð 	&ð 	&ð 	&ð 	&øøøð 	&ð 	&ð 	&ð 	&ð 	&ð 	&s   ¦;»?Á?)Ú	functoolsÚwraps)r   r!   r   s   ` @r    Ú"doesnt_support_saved_tensors_hooksr$   '   sJ   øø€ ð	3ð õ
 „_�QÑÔð&ð &ð &ð &ð &ñ Ôð&ð €Ió    Úflat_in_dimsÚ	flat_argsÚreturnc                 óì   ‡— d„ t          | |¦  «        D ¦   «         Št          ‰¦  «        dk    rt          d¦  «        ‚‰r.t          ˆfd„‰D ¦   «         ¦  «        rt          d‰› d�¦  «        ‚‰d         S )Nc                 óB   — g | ]\  }}|®|                      |¦  «        ‘ŒS r   )Úsize)Ú.0Úin_dimÚargs      r    ú
<listcomp>z0_validate_and_get_batch_size.<locals>.<listcomp>9   s8   € ð ð ð áˆF�CØÐð 	�Š�ÑÔàÐÐr%   r   z/vmap: Expected at least one Tensor to vmap overc              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 dimension)ÚzipÚlenÚ
ValueErrorÚany)r&   r'   r2   s     @r    Ú_validate_and_get_batch_sizer8   6   s´   ø€ ðð å˜|¨YÑ7Ô7ðñ ô €Kõ
 ˆ;ÑÔ˜1ÒÐÝÐJÑKÔKÐ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Útupler5   )r9   s    r    Ú_num_outputsr>   H   s'   € Ý�/¥5Ñ)Ô)ð $Ý�?Ñ#Ô#Ð#Øˆ1r%   ÚvalueÚnum_elementsÚerror_message_lambdac                 ó�   — t          | t          ¦  «        s| f|z  S t          | ¦  «        |k    rt           |¦   «         ¦  «        ‚| S r   )r<   r=   r5   r6   )r?   r@   rA   s      r    Ú	_as_tuplerC   R   sQ   € õ �e�UÑ#Ô#ð 'Øˆx˜,Ñ&Ð&Ý
ˆ5�z„z�\Ò!Ð!ÝÐ-Ð-Ñ/Ô/Ñ0Ô0Ð0Ø€Lr%   Úin_dimsr   Ú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          t          ||¦  «        ¦  «        D �]`\  }\  }}t          |t          ¦  «        s(|�&t          dt	          |¦  «        › d| › d
|› d�¦  «        ‚t          |t          ¦  «        rKt          |t          ¦  «        s6t          dt	          |¦  «        › d| › d
|› dt          |¦  «        › d�	¦  «        ‚|�–||                     ¦   «          k     s||                     ¦   «         k    ret          dt	          |¦  «        › d| › d
|› d|                     ¦   «         › d|                     ¦   «         › d|                     ¦   «         › d�¦  «        ‚|� |dk     r||                     ¦   «         z  ||<   �Œbt          ||¦  «        |||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 -z <= in_dim < )r<   Úintr=   r6   Ú	_get_nameÚtyper5   r   r   Ú	enumerater4   r
   Údimr8   )	rD   r   rE   r'   Ú	args_specr&   Úir.   r-   s	            r    Ú_process_batched_inputsrP   \   sQ  € õ �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Ô%=ð*ð *ð 'ð*ð *ð *ñ
ô 
ð 	
õ &¥c¨)°\Ñ&BÔ&BÑCÔCð 1ñ 1Ñˆ‰=ˆC�Ý˜&¥#Ñ&Ô&ð 	¨6Ð+=Ýð1�	 $™œð 1ð 1°7ð 1ð 1Ø$ð1ð 1ð 1ñô ð õ
 �f�cÑ"Ô"ð 	­:°c½6Ñ+BÔ+Bð 	Ýð<�	 $™œð <ð <°7ð <ð <Ø$ð<ð <å˜‘9”9ð<ð <ð <ñô ð ð Ð 6¨S¯WªW©Y¬Y¨JÒ#6Ð#6¸&ÀCÇGÂGÁIÄIÒ:MÐ:MÝð9�	 $™œð 9ð 9°7ð 9ð 9Ø$ð9ð 9à%(§W¢W¡Y¤Yð9ð 9ð —G’G‘I”Ið9ð 9ð -0¯GªG©I¬Ið9ð 9ð 9ñô ð ð Ð &¨1¢* *Ø$ s§w¢w¡y¤yÑ0ˆL˜‰Oùõ 	% \°9Ñ=Ô=ØØØð	ð r%   Ú
vmap_levelc                 ó\   ‡— ˆfd„t          | |¦  «        D ¦   «         }t          ||¦  «        S )Nc                 ó@   •— g | ]\  }}|€|nt          ||‰¦  «        ‘ŒS r   )r   )r,   r-   r.   rQ   s      €r    r/   z*_create_batched_inputs.<locals>.<listcomp>ž   sA   ø€ ð ð ð áˆF�Cð ˆ~ˆˆ¥>°#°v¸zÑ#JÔ#Jðð ð r%   )r4   r   )r&   r'   rQ   rN   Úbatched_inputss     `  r    Ú_create_batched_inputsrU   š   sG   ø€ ðð ð ð å˜|¨YÑ7Ô7ðñ ô €Nõ ˜.¨)Ñ4Ô4Ð4r%   c           
      ó,  — |€At          |t          j        ¦  «        r%t          |¦  «        rt	          d| › d| › d�¦  «        ‚|S t          |t          j        ¦  «        s&t	          d| › d| › dt          |¦  «        › d�¦  «        ‚t          ||||¦  «        S )NrG   z	, ...): `z5` can not return a BatchedTensor when out_dim is Nonez%` must only return Tensors, got type z3. Did you mean to set out_dims= to None for output?)r<   r   r
   r   r6   rK   r   )ÚnameÚbatched_outputrQ   Ú
batch_sizeÚout_dims        r    Ú_maybe_remove_batch_dimr[   ¥   së   € Ø€Ý�n¥e¤lÑ3Ô3ð 	Õ8HØñ9
ô 9
ð 	õ ð6˜ð 6ð 6 tð 6ð 6ð 6ñô ð ð Ðõ �n¥e¤lÑ3Ô3ð 
Ýð@�Dð @ð @ 4ð @ð @Ý!% nÑ!5Ô!5ð@ð @ð @ñ
ô 
ð 	
õ ˜^¨Z¸ÀWÑMÔMÐMr%   Úout_dimsrY   c                 ó°  ‡‡‡‡‡	— t          | ¦  «        \  }Š	ˆˆˆ	fd„}t          | t          j        ¦  «        rUt          ‰t          ¦  «        r‰g}nXt          ‰t
          ¦  «        rt          ‰¦  «        dk    r‰}n-‰€‰g}n' |¦   «          nt          ‰‰	¦  «        }|€
 |¦   «          ˆˆˆfd„t          ||¦  «        D ¦   «         }t          |‰	¦  «        S )Nc                  ó|   •— t          dt          ‰ ¦  «        › d‰› dt          ‰¦  «        d         › d‰› d�	¦  «        ‚)NrG   ú, ..., out_dims=z`)(<inputs>): out_dims is not compatible with the structure of `outputs`. out_dims has structure r;   z but outputs has structure rH   )r6   rJ   r   )rE   r\   Úoutput_specs   €€€r    Úincompatible_errorz+_unwrap_batched.<locals>.incompatible_errorÅ   sf   ø€ Ýð,•I˜d‘O”Oð ,ð ,°Xð ,ð ,å&2°8Ñ&<Ô&<¸QÔ&?ð,ð ,ð )ð,ð ,ð ,ñ
ô 
ð 	
r%   r;   c           	      óV   •— g | ]%\  }}t          t          ‰¦  «        |‰‰|¦  «        ‘Œ&S r1   )r[   rJ   )r,   rX   rZ   rY   rE   rQ   s      €€€r    r/   z#_unwrap_batched.<locals>.<listcomp>Ý   sJ   ø€ ð ð ð ñ $ˆN˜Gõ 	 Ý�d‰OŒO˜^¨Z¸ÀWñ	
ô 	
ðð ð r%   )
r   r<   r   r
   rI   r=   r5   r   r4   r   )
r9   r\   rQ   rY   rE   Úflat_batched_outputsra   Úflat_out_dimsÚflat_outputsr`   s
    ````    @r    Ú_unwrap_batchedrf   ¼   s1  øøøøø€ õ )5°_Ñ(EÔ(EÑ%Ð˜+ð
ð 
ð 
ð 
ð 
ð 
ð 
õ �/¥5¤<Ñ0Ô0ð !õ �h¥Ñ$Ô$ð 	!Ø%˜JˆMˆMÝ˜¥%Ñ(Ô(ð 	!­S°©]¬]¸aÒ-?Ð-?Ø$ˆMˆMØÐØ%˜JˆMˆMàÐÑ Ô Ð Ð å1°(¸KÑHÔHˆØÐ ØÐÑ Ô Ð ðð ð ð ð ð õ (+Ð+?ÀÑ'OÔ'Oð	ñ ô €Lõ ˜,¨Ñ4Ô4Ð4r%   c                 ó~   — t          | t          ¦  «        rd S | €d S t          dt          |¦  «        › d|› d�¦  «        ‚)NrG   r_   zˆ): `out_dims` must be an int, None or a python collection of ints representing where in the outputs the vmapped dimension should appear.)r<   rI   r6   rJ   )ÚxrE   r\   s      r    Ú_check_int_or_noneri   æ   s]   € Ý�!•SÑÔð ØˆØ€yØˆÝ
ð	,•	˜$‘”ð 	,ð 	,°ð 	,ð 	,ð 	,ñô ð r%   c                 ó~   — t          | t          ¦  «        rd S t          t          t          || ¬¦  «        | ¦  «         d S )N)rE   r\   )r<   rI   r   r   ri   )r\   rE   s     r    Ú$_check_out_dims_is_int_or_int_pytreerk   ò   s?   € Ý�(�CÑ Ô ð ØˆÝ�gÕ(¨t¸hÐGÑGÔGÈÑRÔRÐRÐRÐRr%   c                 óN   — t          | d¦  «        r| j        S t          | ¦  «        S )NÚ__name__)Úhasattrrm   Úrepr)rE   s    r    rJ   rJ   ø   s*   € Ýˆt�ZÑ Ô ð ØŒ}Ðõ
 �‰:Œ:Ðr%   Fc                  óŠ  ‡— t           rd S t          5  t           r	 d d d ¦  «         d S t          j                             dd¦  «        dk    rnda 	 d d d ¦  «         d S t
          j                             ddd¦  «        addl	m
Š ˆfd	„}  | t
          j        j        j        j        ¦  «          | t
          j        j        j        j        ¦  «          | t
          j        j        j        j        ¦  «          | t
          j        j        j        j        ¦  «          | t
          j        j        j        j        ¦  «          | t
          j        j        j        j        ¦  «          | t
          j        j        j        j        ¦  «          | t
          j        j        j        j        ¦  «         da d d d ¦  «         d S # 1 swxY w Y   d S )
NÚPYTORCH_JITÚ1TÚatenÚIMPLÚFuncTorchBatchedr   )Údecomposition_tablec                 óv   •— | ‰v r#t                                | ‰|          ¦  «         d S t          d| › �¦  «        ‚)Nz!could not find decomposition for )ÚVMAP_DECOMPOSITIONS_LIBÚimplÚRuntimeError)Údecomprv   s    €r    Ú#_register_python_decomposition_vmapzElazy_load_decompositions.<locals>._register_python_decomposition_vmap!  sH   ø€ ØÐ,Ð,Ð,Ý'×,Ò,¨VÐ5HÈÔ5PÑQÔQÐQÐQÐQå"Ð#OÀvÐ#OÐ#OÑPÔPÐPr%   )ÚDECOMPOSITIONS_LOADEDÚDECOMPOSITIONS_LOCKÚosÚenvironÚgetr   ÚlibraryÚLibraryrx   Útorch._decomprv   Úopsrs   Úmse_loss_backwardÚdefaultÚsmooth_l1_loss_backwardÚhuber_loss_backwardÚnll_loss_forwardÚnll_loss2d_forwardÚnll_loss_backwardÚnll_loss2d_backwardÚaddr)r|   rv   s    @r    Úlazy_load_decompositionsr�   	  s<  ø€ åð Øˆå	ð $%ð $%Ý ð 	Øð$%ð $%ð $%ñ $%ô $%ð $%ð $%ð $%õ ”
—’˜}¨cÑ2Ô2°cÒ9Ð9Ð9Ø$(Ð!Øð$%ð $%ð $%ñ $%ô $%ð $%ð $%ð $%õ #(¤-×"7Ò"7Ø�FÐ.ñ#
ô #
Ðð 	6Ð5Ð5Ð5Ð5Ð5ð	Qð 	Qð 	Qð 	Qð 	Qð 	,Ð+­E¬I¬NÔ,LÔ,TÑUÔUÐUØ+Ð+ÝŒIŒNÔ2Ô:ñ	
ô 	
ð 	
ð 	,Ð+­E¬I¬NÔ,NÔ,VÑWÔWÐWØ+Ð+­E¬I¬NÔ,KÔ,SÑTÔTÐTØ+Ð+­E¬I¬NÔ,MÔ,UÑVÔVÐVØ+Ð+­E¬I¬NÔ,LÔ,TÑUÔUÐUØ+Ð+­E¬I¬NÔ,NÔ,VÑWÔWÐWØ+Ð+­E¬I¬NÔ,?Ô,GÑHÔHÐHà $ÐðI$%ð $%ð $%ñ $%ô $%ð $%ð $%ð $%ð $%ð $%ð $%ð $%øøøð $%ð $%ð $%ð $%ð $%ð $%s   ’	F8¨(F8ÁEF8Æ8F<Æ?F<c           	      óÜ   — t          ¦   «          t          || ¦  «         t          ||| ¦  «        \  }}}	}
|�$t          |	|||¦  «        }t	          | |||
||fi |¤ŽS t          | |||	|
||fi |¤ŽS r   )r�   rk   rP   Ú_get_chunked_inputsÚ_chunked_vmapÚ
_flat_vmap)rE   rD   r\   Ú
randomnessÚ
chunk_sizer   r   rY   r&   r'   rN   Úchunks_flat_argss               r    Ú	vmap_implr—   5  sË   € ÝÑÔÐÝ(¨°4Ñ8Ô8Ð8Ý5LØ��tñ6ô 6Ñ2€J�˜i¨ð ÐÝ.Ø�| Z°ñ
ô 
Ðõ ØØØØØØð
ð 
ð ð
ð 
ð 	
õ ØØØØØØØð	ð 	ð ð	ð 	ð 	r%   c                 ó`   — | |z  x}}|g|z  }| |z  }|dk    r|                      |¦  «         |S )Nr   )Úappend)Útotal_elemsr•   Ún_chunksÚchunk_sizesÚ	remainders        r    Úget_chunk_sizesrž   W  sJ   € Ø%¨Ñ3Ð3€HˆxØ�, Ñ)€Kà˜jÑ(€IØ�A‚~€~Ø×Ò˜9Ñ%Ô%Ð%ØÐr%   c                 óØ   ‡— |fŠ|�1t          ||¦  «        }t          t          j        |¦  «        ¦  «        Št          ˆfd„t	          | |¦  «        D ¦   «         ¦  «        }t	          |Ž }|S )Nc              3   óv   •K  — | ]3\  }}|�|                      ‰|¬¦  «        n|gt          ‰¦  «        z  V — Œ4d S ©N)rM   )Útensor_splitr5   )r,   Útr-   Ú
split_idxss      €r    r3   z&_get_chunked_inputs.<locals>.<genexpr>g  sr   øè è € ð ð ñ ˆAˆvð Ðð 	
�Š�z vˆÑ.Ô.Ð.ð ð
õ ˆj‰/Œ/ñðð ð ð ð ð r%   )rž   r=   Ú	itertoolsÚ
accumulater4   )r'   r&   rY   r•   rœ   Úflat_args_chunksr–   r¤   s          @r    r‘   r‘   a  s�   ø€ Ø�€JØÐÝ% j°*Ñ=Ô=ˆÝ�9Ô/°Ñ<Ô<Ñ=Ô=ˆ
åð ð ð ð õ ˜Y¨Ñ5Ô5ðñ ô ñ ô Ðõ Ð,Ð-ÐØÐr%   c                 óž   — g }d }| D ]-}t          |¦  «        \  }}|                     |¦  «         |€|}Œ.t          t          |Ž ¦  «        }||fS r   )r   r™   Úlistr4   )Úchunks_output_Úflat_chunks_outputÚarg_specÚoutputÚflat_outputÚ	arg_specsÚflat_output_chunkss          r    Ú_flatten_chunks_outputr±   w  sq   € ð ÐØ€HØ ð !ð !ˆÝ!-¨fÑ!5Ô!5Ñˆ�YØ×!Ò! +Ñ.Ô.Ð.ØÐØ ˆHøõ �cÐ#5Ð6Ñ7Ô7ÐØ˜xÐ'Ð'r%   c                 ó   — t          | |¦  «        }t          |¦  «        t          |¦  «        k    sJ ‚g }t          |¦  «        D ]9\  }}|                     t	          j        ||         |¬¦  «        ¦  «         d ||<   Œ:|S r¡   )r   r5   rL   r™   r   Úcat)r\   r¬   r°   rd   r®   ÚidxrZ   s          r    Ú_concat_chunked_outputsrµ   ˆ  s�   € å-¨h¸ÑAÔA€MÝˆ}ÑÔ¥Ð%7Ñ!8Ô!8Ò8Ð8Ð8Ð8Ø€KÝ! -Ñ0Ô0ð 'ð '‰ˆˆWØ×Ò�5œ9Ð%7¸Ô%<À'ÐJÑJÔJÑKÔKÐKà"&Ð˜3ÑÐàÐr%   c                 óT  — g }|dk    rt          j        ¦   «         nd }|D ]U}	t          ||	¦  «        }
|
dk    rŒ|�t          j        |¦  «         |                     t          | |
||	|||fi |¤Ž¦  «         ŒVt          |¦  «        \  }}~t          |||¦  «        }t          ||¦  «        S )NÚsamer   )	r   Úget_rng_stater8   Úset_rng_stater™   r“   r±   rµ   r   )rE   r&   r–   rN   r\   r”   r   Úchunks_outputÚrsr'   rY   r°   r¬   r®   s                 r    r’   r’   –  sö   € ð €MØ",°Ò"6Ð"6�Ô	Ñ	Ô	Ð	¸D€BØ%ð 
ð 
ˆ	Ý1°,À	ÑJÔJˆ
ð ˜Š?ˆ?Øàˆ>ÝÔ Ñ#Ô#Ð#Ø×ÒÝØØØØØØØð	ð 	ð ð	ð 	ñ	
ô 	
ð 	
ð 	
õ $:¸-Ñ#HÔ#HÑ Ð˜ð 	õ *¨(°HÐ>PÑQÔQ€Kõ ˜+ xÑ0Ô0Ð0r%   c                 ó2   — | dvrt          d| › �¦  «        ‚d S )N)ÚerrorÚ	differentr·   zLOnly allowed values for randomness are 'error', 'different', or 'same'. Got )rz   )r”   s    r    Ú_check_randomness_argr¿   È  s4   € ØÐ7Ð7Ð7ÝØgÐ[eÐgÐgñ
ô 
ð 	
ð 8Ð7r%   c              #   óv   K  — 	 t          | |¦  «        }|V — t          ¦   «          d S # t          ¦   «          w xY wr   )r   r   )rY   r”   rQ   s      r    Úvmap_increment_nestingrÁ   Ï  sK   è è € ð"Ý,¨Z¸ÑDÔDˆ
ØÐÐÐåÑ!Ô!Ð!Ð!Ð!øÕÑ!Ô!Ð!Ð!øøøs   „( ¨8c                 ó°   — t          ||¦  «        5 }t          ||||¦  «        }	 | |	i |¤Ž}
t          |
|||| ¦  «        cd d d ¦  «         S # 1 swxY w Y   d S r   )rÁ   rU   rf   )rE   rY   r&   r'   rN   r\   r”   r   rQ   rT   r9   s              r    r“   r“   Ø  sÊ   € õ 
  
¨JÑ	7Ô	7ð X¸:Ý/Ø˜) Z°ñ
ô 
ˆð ˜$ Ð9°&Ð9Ð9ˆÝ˜°¸*ÀjÐRVÑWÔWðXð Xð Xð Xñ Xô Xð Xð Xð Xð Xð Xð Xøøøð Xð Xð Xð Xð Xð Xs   ‘-AÁAÁAc                 ó   ‡ ‡‡‡— ˆˆ ˆˆfd„}|S )Nc                  óª   •— t          ‰‰¦  «        5 }t          | ‰|¦  «        } ‰|i |¤Ž}t          ||¦  «        cd d d ¦  «         S # 1 swxY w Y   d S r   )rÁ   Úwrap_batchedÚunwrap_batched)	r   r   rQ   rT   r9   rY   rE   rD   r”   s	        €€€€r    Úinnerzrestore_vmap.<locals>.innerø  s¦   ø€ Ý# J°
Ñ;Ô;ð 	?¸zÝ)¨$°¸ÑDÔDˆNØ"˜d NÐ=°fÐ=Ð=ˆOÝ! /°:Ñ>Ô>ð	?ð 	?ð 	?ð 	?ñ 	?ô 	?ð 	?ð 	?ð 	?ð 	?ð 	?ð 	?øøøð 	?ð 	?ð 	?ð 	?ð 	?ð 	?s   ’)AÁAÁAr1   )rE   rD   rY   r”   rÇ   s   ```` r    Úrestore_vmaprÈ   ÷  s5   øøøø€ ð?ð ?ð ?ð ?ð ?ð ?ð ?ð ?ð €Lr%   c                 óv   — t          | ¦  «        \  }}t          ||¦  «        }|€J ‚t          ||||¦  «        }|S r   )r   r   rU   )r   ÚbdimsÚlevelr'   ÚspecÚ
flat_bdimsÚresults          r    rÅ   rÅ     sF   € Ý" 4Ñ(Ô(�O€IˆtÝ*¨5°$Ñ7Ô7€JØÐ!Ð!Ð!Ý# J°	¸5À$ÑGÔG€FØ€Mr%   c                 óÊ   ‡— t          | ¦  «        \  }}t          |¦  «        dk    r| dfS ˆfd„|D ¦   «         }t          |Ž \  }}t          ||¦  «        t          ||¦  «        fS )Nr   r1   c                 ó–   •— g | ]E}t          |t          j        ¦  «        r%t          j        j                             |‰¦  «        n|d f‘ŒFS r   )r<   r   r
   Ú_CÚ
_functorchrf   )r,   r.   rË   s     €r    r/   z"unwrap_batched.<locals>.<listcomp>  s]   ø€ ð ð ð ð õ �c�5œ<Ñ(Ô(ð	�ŒÔ×+Ò+¨C°Ñ7Ô7Ð7à�4ˆ[ðð ð r%   )r   r5   r4   r   )r   rË   r'   rÌ   rÎ   r­   rÊ   s    `     r    rÆ   rÆ   	  s†   ø€ Ý" 4Ñ(Ô(�O€IˆtÝ
ˆ9�~„~˜ÒÐØ�Rˆxˆðð ð ð ð ð	ñ ô €Fõ ˜�L�M€FˆEÝ˜& $Ñ'Ô'­¸¸tÑ)DÔ)DÐDÐDr%   )<Ú
contextlibr"   r¥   r   Ú	threadingr   Útypingr   r   r   r   r   r	   r   r
   Útorch._C._functorchr   r   r   r   r   Útorch.utils._pytreer   r   r   r   r   rI   Ú	in_dims_tÚ
out_dims_tr$   r8   r>   ÚstrrC   rP   rU   r[   rf   ri   rk   rJ   r}   ÚLockr~   rx   r�   r—   rž   r‘   r±   rµ   r’   r¿   ÚcontextmanagerrÁ   r“   rÈ   rÅ   rÆ   r1   r%   r    ú<module>rÝ      s`  ðð Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ø 	€	€	€	Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >à €€€Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð �#�u�*Ô€	Ø�3˜˜c 3˜hœÐ'Ô(€
ðð ð ðØ�x ”}Ô%ðØ26ðàðð ð ð ð$ %¨°°f¸c°kÔ0BÐ(BÔ"Cð Èð ð ð ð ðØðØ!ðØ9AÀ"ÀcÀ'Ô9Jðà
ðð ð ð ð7Øð7Ø#ð7Ø+3ð7à
ˆ3��S”	˜4 œ9 hÐ.Ô/ð7ð 7ð 7ð 7ð|5Ø�s”)ð5Ø(,¨S¬	ð5Ø?Bð5à
ð5ð 5ð 5ð 5ðNð Nð Nð.'5Ø˜6 5¨°¨Ô#5Ð5Ô6ð'5àð'5ð ð'5ð ð	'5ð
 ð'5ð ð'5ð '5ð '5ð '5ðT	ð 	ð 	ðS°:ð SÀXð SÐRVð Sð Sð Sð Sð�Hð ð ð ð ð Ð Ø$�i”nÑ&Ô&Ð ØÐ ð
)%ð )%ð )%ðXð ð ðDð ð ðð ð ð,(ð (ð (ð"
ð 
ð 
ð.1ð .1ð .1ðd
ð 
ð 
ð Ôð"ð "ñ Ôð"ðXð Xð Xð>ð ð ðð ð ðEð Eð Eð Eð Er%   