§
    ŠŠtjÍK  ã                  ó  — d dl mZ d dlZd dlZd dlZd dlmZ d dlmZ d dlm	Z	m
Z
mZmZ d dlmZmZ d dlZd dlm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rd dlm Z m!Z!  ed¦  «        Z" ed¦  «        Z#e$e%e	df         z  Z&e$e%e$df         z  dz  Z'dcd„Z(ddd„Z)ded„Z*dfd"„Z+dgd*„Z,dhd.„Z-did7„Z.djd:„Z/dkd=„Z0dld>„Z1dmd?„Z2dndF„Z3dodI„Z4dpdK„Z5dqdN„Z6drdS„Z7dsdU„Z8dtdV„Z9ej:        dudX„¦   «         Z;dvdZ„Z<dwd]„Z=dxd`„Z>dydb„Z?dS )zé    )ÚannotationsN)ÚCallable)Úpartial)ÚAnyÚcastÚNoReturnÚTYPE_CHECKING)Ú	ParamSpecÚTypeVar)ÚTensor)Úis_batchedtensor)Ú_add_batch_dimÚ_remove_batch_dimÚ_vmap_decrement_nestingÚ_vmap_increment_nestingÚlazy_load_decompositions)Ú_broadcast_to_and_flattenÚtree_flattenÚ	tree_map_Útree_unflattenÚTreeSpec)Ú	GeneratorÚIterableÚ_PÚ_R.ÚfúCallable[_P, _R]Úreturnc                óP   ‡ ‡— dŠt          j        ‰ ¦  «        d	ˆ ˆfd„¦   «         }|S )
Nzvtorch.func.{grad, vjp, jacrev, hessian} don't yet support saved tensor hooks. Please open an issue with your use case.Úargsú_P.argsÚkwargsú	_P.kwargsr   r   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)r    r"   r   Úmessages     €€úS/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/_functorch/vmap.pyÚfnz.doesnt_support_saved_tensors_hooks.<locals>.fn5   s’   ø€ åŒ^Ô!×=Ò=¸gÑFÔFð 	&ð 	&Ø�1�dÐ%˜fÐ%Ð%ð	&ð 	&ð 	&ð 	&ñ 	&ô 	&ð 	&ð 	&ð 	&ð 	&ð 	&ð 	&øøøð 	&ð 	&ð 	&ð 	&ð 	&ð 	&s   ¦;»?Á?)r    r!   r"   r#   r   r   )Ú	functoolsÚwraps)r   r,   r*   s   ` @r+   Ú"doesnt_support_saved_tensors_hooksr/   /   sO   øø€ ð	3ð õ
 „_�QÑÔð&ð &ð &ð &ð &ð &ñ Ôð&ð €Ió    Úflat_in_dimsúlist[int | None]Ú	flat_argsú	list[Any]Úintc                óì   ‡— 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>A   s8   € ð ð ð áˆF�CØÐð 	�Š�ÑÔàÐÐr0   r   z/vmap: Expected at least one Tensor to vmap overc              3  ó0   •K  — | ]}|‰d          k    V — ŒdS )r   N© )r9   r8   Úbatch_sizess     €r+   ú	<genexpr>z/_validate_and_get_batch_size.<locals>.<genexpr>H   s,   øè è € ÐJÐJ°d˜4 ;¨q¤>Ò1ÐJÐJÐJÐJÐJÐJr0   zTvmap: Expected all tensors to have the same size in the mapped dimension, got sizes z for the mapped dimension)ÚzipÚlenÚ
ValueErrorÚany)r1   r3   r?   s     @r+   Ú_validate_and_get_batch_sizerE   >   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Œ>Ðr0   Úbatched_outputsúTensor | tuple[Tensor, ...]c                óN   — t          | t          ¦  «        rt          | ¦  «        S dS )Né   )Ú
isinstanceÚtuplerB   )rF   s    r+   Ú_num_outputsrL   P   s'   € Ý�/¥5Ñ)Ô)ð $Ý�?Ñ#Ô#Ð#Øˆ1r0   Úvalueútuple[_R, ...] | _RÚnum_elementsÚerror_message_lambdaúCallable[[], str]útuple[_R, ...]c                ó�   — t          | t          ¦  «        s| f|z  S t          | ¦  «        |k    rt           |¦   «         ¦  «        ‚| S r%   )rJ   rK   rB   rC   )rM   rO   rP   s      r+   Ú	_as_tuplerT   Z   sQ   € õ
 �e�UÑ#Ô#ð 'Øˆx˜,Ñ&Ð&Ý
ˆ5�z„z�\Ò!Ð!ÝÐ-Ð-Ñ/Ô/Ñ0Ô0Ð0Ø€Lr0   Úin_dimsÚ	in_dims_tr    útuple[Any, ...]ÚfuncúCallable[..., Any]ú1tuple[int, list[int | None], list[Any], TreeSpec]c                ó  — 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 rI   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 < )rJ   r5   rK   rC   Ú	_get_nameÚtyperB   r   r   Ú	enumeraterA   r   ÚdimrE   )	rU   r    rX   r3   Ú	args_specr1   Úir;   r:   s	            r+   Ú_process_batched_inputsrd   f   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Ñ=Ô=ØØØð	ð r0   Ú
vmap_levelrb   r   c                ó\   ‡— ˆfd„t          | |¦  «        D ¦   «         }t          ||¦  «        S )Nc                ó@   •— g | ]\  }}|€|nt          ||‰¦  «        ‘ŒS r%   )r   )r9   r:   r;   re   s      €r+   r<   z*_create_batched_inputs.<locals>.<listcomp>¬   sA   ø€ ð ð ð áˆF�Cð ˆ~ˆˆ¥>°#°v¸zÑ#JÔ#Jðð ð r0   )rA   r   )r1   r3   re   rb   Úbatched_inputss     `  r+   Ú_create_batched_inputsri   ¥   sG   ø€ ðð ð ð å˜|¨YÑ7Ô7ðñ ô €Nõ ˜.¨)Ñ4Ô4Ð4r0   ÚnameÚstrÚbatched_outputr   Ú
batch_sizeÚout_dimú
int | Noneútorch.Tensorc           
     ó,  — |€At          |t          j        ¦  «        r%t          |¦  «        rt	          d| › d| › d�¦  «        ‚|S t          |t          j        ¦  «        s&t	          d| › d| › dt          |¦  «        › d�¦  «        ‚t          ||||¦  «        S )Nr\   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?)rJ   r&   r   r   rC   r_   r   )rj   rl   re   rm   rn   s        r+   Ú_maybe_remove_batch_dimrr   ³   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ÐMr0   Úout_dimsÚ
out_dims_tc                óÖ  ‡‡‡‡‡
— t          | ¦  «        \  }Š
dˆˆˆ
fd„}g }t          | t          j        ¦  «        rbt          ‰t          ¦  «        r‰g}nht          ‰t
          ¦  «        r#t          ‰¦  «        dk    rt          ‰¦  «        }n0‰€‰g}n* |¦   «          nt          ‰‰
¦  «        }|€ |¦   «          n|}ˆˆˆfd„t          ||¦  «        D ¦   «         }	t          |	‰
¦  «        S )Nr   r   c                 ó|   •— t          dt          ‰ ¦  «        › d‰› dt          ‰¦  «        d         › d‰› d�	¦  «        ‚)Nr\   ú, ..., out_dims=z`)(<inputs>): out_dims is not compatible with the structure of `outputs`. out_dims has structure rI   z but outputs has structure r]   )rC   r^   r   )rX   rs   Úoutput_specs   €€€r+   Úincompatible_errorz+_unwrap_batched.<locals>.incompatible_errorÙ   sf   ø€ Ýð,•I˜d‘O”Oð ,ð ,°Xð ,ð ,å&2°8Ñ&<Ô&<¸QÔ&?ð,ð ,ð )ð,ð ,ð ,ñ
ô 
ð 	
r0   rI   c           	     óV   •— g | ]%\  }}t          t          ‰¦  «        |‰‰|¦  «        ‘Œ&S r>   )rr   r^   )r9   rl   rn   rm   rX   re   s      €€€r+   r<   z#_unwrap_batched.<locals>.<listcomp>ô   sJ   ø€ ð ð ð ñ $ˆN˜Gõ 	 Ý�d‰OŒO˜^¨Z¸ÀWñ	
ô 	
ðð ð r0   )r   r   )r   rJ   r&   r   r5   rK   rB   Úlistr   rA   r   )rF   rs   re   rm   rX   Úflat_batched_outputsry   Úflat_out_dimsÚbroadcast_resultÚflat_outputsrx   s    ````     @r+   Ú_unwrap_batchedr€   Ð   sJ  øøøøø€ õ )5°_Ñ(EÔ(EÑ%Ð˜+ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð ')€MÝ�/¥5¤<Ñ0Ô0ð -õ �h¥Ñ$Ô$ð 	!Ø%˜JˆMˆMÝ˜¥%Ñ(Ô(ð 	!­S°©]¬]¸aÒ-?Ð-?Ý  ™NœNˆMˆMØÐØ%˜JˆMˆMàÐÑ Ô Ð Ð å4°X¸{ÑKÔKÐØÐ#ØÐÑ Ô Ð Ð à,ˆMðð ð ð ð ð õ (+Ð+?ÀÑ'OÔ'Oð	ñ ô €Lõ ˜,¨Ñ4Ô4Ð4r0   ÚxÚNonec                ó~   — t          | t          ¦  «        rd S | €d S t          dt          |¦  «        › d|› d�¦  «        ‚)Nr\   rw   zˆ): `out_dims` must be an int, None or a python collection of ints representing where in the outputs the vmapped dimension should appear.)rJ   r5   rC   r^   )r�   rX   rs   s      r+   Ú_check_int_or_noner„   ý   s]   € Ý�!•SÑÔð ØˆØ€yØˆÝ
ð	,•	˜$‘”ð 	,ð 	,°ð 	,ð 	,ð 	,ñô ð r0   c                ó~   — t          | t          ¦  «        rd S t          t          t          || ¬¦  «        | ¦  «         d S )N)rX   rs   )rJ   r5   r   r   r„   )rs   rX   s     r+   Ú$_check_out_dims_is_int_or_int_pytreer†   	  sA   € õ �(�CÑ Ô ð ØˆÝ�gÕ(¨t¸hÐGÑGÔGÈÑRÔRÐRÐRÐRr0   c                ó²   — t          | d¦  «        r| j        S t          | t          j        ¦  «        rdt          | j        ¦  «        › d�S t          | ¦  «        S )NÚ__name__zfunctools.partial(z, ...))Úhasattrrˆ   rJ   r-   r   r^   rX   Úrepr)rX   s    r+   r^   r^     s[   € Ýˆt�ZÑ Ô ð ØŒ}Ðå�$�	Ô)Ñ*Ô*ð AØ@¥I¨d¬iÑ$8Ô$8Ð@Ð@Ð@Ð@õ
 �‰:Œ:Ðr0   ú)Callable[_P, Tensor | tuple[Tensor, ...]]Ú
randomnessÚ
chunk_sizer!   r"   r#   c           	     óÜ   — t          ¦   «          t          || ¦  «         t          ||| ¦  «        \  }}}	}
|�$t          |	|||¦  «        }t	          | |||
||fi |¤ŽS t          | |||	|
||fi |¤ŽS r%   )r   r†   rd   Ú_get_chunked_inputsÚ_chunked_vmapÚ
_flat_vmap)rX   rU   rs   rŒ   r�   r    r"   rm   r1   r3   rb   Úchunks_flat_argss               r+   Ú	vmap_implr“     sÍ   € õ ÑÔÐÝ(¨°4Ñ8Ô8Ð8Ý5LØ��tñ6ô 6Ñ2€J�˜i¨ð ÐÝ.Ø�| Z°ñ
ô 
Ðõ ØØØØØØð
ð 
ð ð
ð 
ð 	
õ ØØØØØØØð	ð 	ð ð	ð 	ð 	r0   Útotal_elemsú	list[int]c                ó\   — | |z  }|g|z  }| |z  }|dk    r|                      |¦  «         |S )Nr   )Úappend)r”   r�   Ún_chunksÚchunk_sizesÚ	remainders        r+   Úget_chunk_sizesr›   H  sE   € Ø˜jÑ(€HØ�, Ñ)€Kà˜jÑ(€IØ�A‚~€~Ø×Ò˜9Ñ%Ô%Ð%ØÐr0   úIterable[tuple[Any, ...]]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©ra   )Útensor_splitrB   )r9   Útr:   Ú
split_idxss      €r+   r@   z&_get_chunked_inputs.<locals>.<genexpr>]  sr   øè è € ð 
ð 
ñ ˆAˆvð Ð!ð �NŠN˜:¨6ˆNÑ2Ô2Ð2ð ðõ �*‰oŒoñð	
ð 
ð 
ð 
ð 
ð 
r0   )r›   rK   Ú	itertoolsÚ
accumulaterA   )r3   r1   rm   r�   r™   Úflat_args_chunksr’   r¢   s          @r+   r�   r�   R  s�   ø€ ð �€JØÐÝ% j°*Ñ=Ô=ˆÝ�9Ô/°Ñ<Ô<Ñ=Ô=ˆ
åð 
ð 
ð 
ð 
õ ˜Y¨Ñ5Ô5ð
ñ 
ô 
ñ 
ô 
Ðõ Ð,Ð-ÐØÐr0   Úchunks_output_ú&tuple[list[tuple[Any, ...]], TreeSpec]c                óÀ   — g }d }| D ]-}t          |¦  «        \  }}|                     |¦  «         |€|}Œ.t          t          |Ž ¦  «        }|€t	          d¦  «        ‚||fS )Nzarg_spec must not be None)r   r—   r{   rA   ÚAssertionError)r¦   Úflat_chunks_outputÚarg_specÚoutputÚflat_outputÚ	arg_specsÚflat_output_chunkss          r+   Ú_flatten_chunks_outputr°   o  s†   € ð
 +-ÐØ $€HØ ð !ð !ˆÝ!-¨fÑ!5Ô!5Ñˆ�YØ×!Ò! +Ñ.Ô.Ð.ØÐØ ˆHøõ �cÐ#5Ð6Ñ7Ô7ÐØÐÝÐ8Ñ9Ô9Ð9Ø˜xÐ'Ð'r0   r«   r¯   úlist[tuple[Any, ...] | None]úlist[Tensor]c                óª  — t          | |¦  «        }|€t          d¦  «        ‚t          |¦  «        t          |¦  «        k    r/t          dt          |¦  «        › dt          |¦  «        › �¦  «        ‚g }t          |¦  «        D ]P\  }}||         }|€t          d|› d�¦  «        ‚|                     t          j        ||¬¦  «        ¦  «         d ||<   ŒQ|S )Nzflat_out_dims must not be Nonezlen(flat_out_dims)=z != len(flat_output_chunks)=zchunk at index z must not be NonerŸ   )r   r©   rB   r`   r—   r&   Úcat)rs   r«   r¯   r}   r­   Úidxrn   Úchunks           r+   Ú_concat_chunked_outputsr·   „  sý   € õ .¨h¸ÑAÔA€MØÐÝÐ=Ñ>Ô>Ð>Ý
ˆ=ÑÔ�SÐ!3Ñ4Ô4Ò4Ð4ÝØk¥# mÑ"4Ô"4ÐkÐkÕRUÐVhÑRiÔRiÐkÐkñ
ô 
ð 	
ð !#€KÝ! -Ñ0Ô0ð 'ð '‰ˆˆWØ" 3Ô'ˆØˆ=Ý Ð!I°3Ð!IÐ!IÐ!IÑJÔJÐJØ×Ò�5œ9 U°Ð8Ñ8Ô8Ñ9Ô9Ð9à"&Ð˜3ÑÐàÐr0   r’   c                óÎ  — g }|dk    rt          j        ¦   «         nd }|D ]d}	t          |	¦  «        }
t          ||
¦  «        }|dk    rŒ(|�t          j        |¦  «         |                     t          | |||
|||fi |¤Ž¦  «         Œet          |¦  «        \  }}~t          ||t          t          t          t          df         d z           |¦  «        ¦  «        }t          ||¦  «        S )NÚsamer   .)r&   Úget_rng_stater{   rE   Úset_rng_stater—   r‘   r°   r·   r   rK   r   r   )rX   r1   r’   rb   rs   rŒ   r"   Úchunks_outputÚrsÚflat_args_tupler3   rm   r¯   r«   r­   s                  r+   r�   r�   ž  s$  € ð  "€MØ",°Ò"6Ð"6�Ô	Ñ	Ô	Ð	¸D€BØ+ð 
ð 
ˆÝ˜Ñ)Ô)ˆ	Ý1°,À	ÑJÔJˆ
ð ˜Š?ˆ?Øàˆ>ÝÔ Ñ#Ô#Ð#Ø×ÒÝØØØØØØØð	ð 	ð ð	ð 	ñ	
ô 	
ð 	
ð 	
õ $:¸-Ñ#HÔ#HÑ Ð˜ð 	õ
 *Ø�(�D¥¥e­C°¨H¤o¸Ñ&<Ô!=Ð?QÑRÔRñô €Kõ
 ˜+ xÑ0Ô0Ð0r0   c                ó2   — | dvrt          d| › �¦  «        ‚d S )N)ÚerrorÚ	differentr¹   zLOnly allowed values for randomness are 'error', 'different', or 'same'. Got )ÚRuntimeError)rŒ   s    r+   Ú_check_randomness_argrÃ   Û  s4   € ØÐ7Ð7Ð7ÝØgÐ[eÐgÐgñ
ô 
ð 	
ð 8Ð7r0   úGenerator[int, None, None]c              #  óv   K  — 	 t          | |¦  «        }|V — t          ¦   «          d S # t          ¦   «          w xY wr%   )r   r   )rm   rŒ   re   s      r+   Úvmap_increment_nestingrÆ   â  sK   è è € ð"Ý,¨Z¸ÑDÔDˆ
ØÐÐÐåÑ!Ô!Ð!Ð!Ð!øÕÑ!Ô!Ð!Ð!øøøs   „( ¨8ú*Callable[..., Tensor | tuple[Tensor, ...]]c                ó°   — t          ||¦  «        5 }t          ||||¦  «        }	 | |	i |¤Ž}
t          |
|||| ¦  «        cd d d ¦  «         S # 1 swxY w Y   d S r%   )rÆ   ri   r€   )rX   rm   r1   r3   rb   rs   rŒ   r"   re   rh   rF   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úCallable[..., _R]úCallable[..., tuple[Any, Any]]c                ó    ‡ ‡‡‡— dˆˆ ˆˆfd„}|S )Nr    r   r"   r   útuple[Any, Any]c                 óª   •— 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"   re   rh   rF   rm   rX   rU   rŒ   s	        €€€€r+   Úinnerzrestore_vmap.<locals>.inner  s¦   ø€ Ý# J°
Ñ;Ô;ð 	?¸zÝ)¨$°¸ÑDÔDˆNØ"˜d NÐ=°fÐ=Ð=ˆOÝ! /°:Ñ>Ô>ð	?ð 	?ð 	?ð 	?ñ 	?ô 	?ð 	?ð 	?ð 	?ð 	?ð 	?ð 	?øøøð 	?ð 	?ð 	?ð 	?ð 	?ð 	?s   ’)AÁAÁA)r    r   r"   r   r   rÌ   r>   )rX   rU   rm   rŒ   rÐ   s   ```` r+   Úrestore_vmaprÑ     s:   øøøø€ ð?ð ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?ð €Lr0   ÚbdimsÚlevelc                ó�   — t          | ¦  «        \  }}t          ||¦  «        }|€t          d¦  «        ‚t          ||||¦  «        }|S )Nzflat_bdims must not be None)r   r   r©   ri   )r    rÒ   rÓ   r3   ÚspecÚ
flat_bdimsÚresults          r+   rÎ   rÎ     sQ   € õ # 4Ñ(Ô(�O€IˆtÝ*¨5°$Ñ7Ô7€JØÐÝÐ:Ñ;Ô;Ð;Ý# J°	¸5À$ÑGÔG€FØ€Mr0   rÌ   c                óÊ   ‡— t          | ¦  «        \  }}t          |¦  «        dk    r| dfS ˆfd„|D ¦   «         }t          |Ž \  }}t          ||¦  «        t          ||¦  «        fS )Nr   r>   c                ó–   •— g | ]E}t          |t          j        ¦  «        r%t          j        j                             |‰¦  «        n|d f‘ŒFS r%   )rJ   r&   r   Ú_CÚ
_functorchr€   )r9   r;   rÓ   s     €r+   r<   z"unwrap_batched.<locals>.<listcomp>.  s]   ø€ ð ð ð ð õ ˜#�uœ|Ñ,Ô,ð�EŒHÔ×/Ò/°°UÑ;Ô;Ð;à�t�ð	ð ð r0   )r   rB   rA   r   )r    rÓ   r3   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ÐDr0   )r   r   r   r   )r1   r2   r3   r4   r   r5   )rF   rG   r   r5   )rM   rN   rO   r5   rP   rQ   r   rR   )rU   rV   r    rW   rX   rY   r   rZ   )
r1   r2   r3   r4   re   r5   rb   r   r   rW   )rj   rk   rl   r   re   r5   rm   r5   rn   ro   r   rp   )rF   rG   rs   rt   re   r5   rm   r5   rX   rY   r   rW   )r�   r   rX   rY   rs   rt   r   r‚   )rs   rt   rX   rY   r   r‚   )rX   rY   r   rk   )rX   r‹   rU   rV   rs   rt   rŒ   rk   r�   ro   r    r!   r"   r#   r   r   )r”   r5   r�   r5   r   r•   )
r3   r4   r1   r2   rm   r5   r�   ro   r   rœ   )r¦   r4   r   r§   )rs   rt   r«   r   r¯   r±   r   r²   )rX   r‹   r1   r2   r’   rœ   rb   r   rs   rt   rŒ   rk   r"   r   r   r   )rŒ   rk   r   r‚   )rm   r5   rŒ   rk   r   rÄ   )rX   rÇ   rm   r5   r1   r2   r3   r4   rb   r   rs   rt   rŒ   rk   r"   r   r   r   )
rX   rÉ   rU   rV   rm   r5   rŒ   rk   r   rÊ   )r    rW   rÒ   rV   rÓ   r5   r   rW   )r    r   rÓ   r5   r   rÌ   )@Ú
__future__r   Ú
contextlibr-   r£   Úcollections.abcr   r   Útypingr   r   r   r	   Útyping_extensionsr
   r   r&   r   Útorch._C._functorchr   Útorch._functorch.predispatchr   r   r   r   r   Útorch.utils._pytreer   r   r   r   r   r   r   r   r   r5   rK   rV   rt   r/   rE   rL   rT   rd   ri   rr   r€   r„   r†   r^   r“   r›   r�   r°   r·   r�   rÃ   ÚcontextmanagerrÆ   r‘   rÑ   rÎ   rÏ   r>   r0   r+   ú<module>rå      sº  ðð #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0à €€€Ø Ð Ð Ð Ð Ð Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0ðð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð 4Ø3Ð3Ð3Ð3Ð3Ð3Ð3Ð3ð €Yˆt�_„_€Ø€WˆT�]„]€à�%˜˜S˜”/Ñ!€	Ø�5˜˜c˜”?Ñ" TÑ)€
ðð ð ð ðð ð ð ð$ð ð ð ð	ð 	ð 	ð 	ð7ð 7ð 7ð 7ð~5ð 5ð 5ð 5ðNð Nð Nð Nð:*5ð *5ð *5ð *5ðZ	ð 	ð 	ð 	ðSð Sð Sð Sð
ð 
ð 
ð 
ð'ð 'ð 'ð 'ðTð ð ð ðð ð ð ð:(ð (ð (ð (ð*ð ð ð ð491ð 91ð 91ð 91ðz
ð 
ð 
ð 
ð Ôð"ð "ð "ñ Ôð"ðXð Xð Xð XðL	ð 	ð 	ð 	ðð ð ð ðEð Eð Eð Eð Eð Er0   