Ë
    L²jÍK  ã                  ó4  — 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'd&d„Z(	 	 	 	 	 	 d'd„Z)d(d„Z*	 	 	 	 	 	 	 	 d)d„Z+	 	 	 	 	 	 	 	 d*d„Z,	 	 	 	 	 	 	 	 	 	 d+d„Z-	 	 	 	 	 	 	 	 	 	 	 	 d,d„Z.	 	 	 	 	 	 	 	 	 	 	 	 d-d„Z/d.d„Z0	 	 	 	 	 	 d/d„Z1d0d„Z2	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d1d„Z3d2d„Z4	 	 	 	 	 	 	 	 	 	 d3d„Z5	 	 	 	 d4d„Z6	 	 	 	 	 	 	 	 d5d„Z7	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d6d„Z8d7d „Z9ejt                  	 	 	 	 	 	 d8d!„«       Z;	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d9d"„Z<	 	 	 	 	 	 	 	 	 	 d:d#„Z=	 	 	 	 	 	 	 	 d;d$„Z>d<d%„Z?y)=é    )Ú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.c                óL   ‡ ‡— 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.c                 ó’   •— t         j                  j                  j                  ‰«      5   ‰| i |¤Žcd d d «       S # 1 sw Y   y xY w©N)ÚtorchÚautogradÚgraphÚdisable_saved_tensors_hooks)ÚargsÚkwargsÚfÚmessages     €€úT/var/www/html/ia-enhanced/venv/lib/python3.12/site-packages/torch/_functorch/vmap.pyÚfnz.doesnt_support_saved_tensors_hooks.<locals>.fn5   s=   ø€ ä�^‰^×!Ñ!×=Ñ=¸gÓFñ 	&Ù�dÐ%˜fÑ%÷	&÷ 	&ò 	&ús	   «=½A)r#   ú_P.argsr$   ú	_P.kwargsÚreturnr   )Ú	functoolsÚwraps)r%   r(   r&   s   ` @r'   Ú"doesnt_support_saved_tensors_hooksr.   /   s1   ù€ ð	3ð ô
 ‡_�_�QÓõ&ó ð&ð €Ió    c                óö   ‡— t        | |«      D ��cg c]  \  }}|�|j                  |«      ‘Œ c}}Št        ‰«      dk(  rt        d«      ‚‰r#t	        ˆfd„‰D «       «      rt        d‰› d�«      ‚‰d   S c c}}w )Nr   z/vmap: Expected at least one Tensor to vmap overc              3  ó.   •K  — | ]  }|‰d    k7  –— Œ y­w)r   N© )Ú.0ÚsizeÚbatch_sizess     €r'   ú	<genexpr>z/_validate_and_get_batch_size.<locals>.<genexpr>H   s   øè ø€ ÒJ°d˜4 ;¨q¡>Õ1ÑJùs   ƒzTvmap: Expected all tensors to have the same size in the mapped dimension, got sizes z for the mapped dimension)Úzipr4   ÚlenÚ
ValueErrorÚany)Úflat_in_dimsÚ	flat_argsÚin_dimÚargr5   s       @r'   Ú_validate_and_get_batch_sizer?   >   s“   ø€ ô
 ˜|¨YÓ7÷áˆF�CØÐð 	�‰�Õó€Kô
 ˆ;Ó˜1ÒÜÐJÓKÐKÙ”sÓJ¸kÔJÔJÜð$Ø$/ =Ð0IðKó
ð 	
ð �q‰>Ðùós   ‘A5c                ó:   — t        | t        «      rt        | «      S y)Né   )Ú
isinstanceÚtupler8   )Úbatched_outputss    r'   Ú_num_outputsrE   P   s   € Ü�/¤5Ô)Ü�?Ó#Ð#Ør/   c                ón   — t        | t        «      s| f|z  S t        | «      |k7  rt         |«       «      ‚| S r   )rB   rC   r8   r9   )ÚvalueÚnum_elementsÚerror_message_lambdas      r'   Ú	_as_tuplerJ   Z   s;   € ô
 �eœUÔ#Øˆx˜,Ñ&Ð&Ü
ˆ5ƒz�\Ò!ÜÑ-Ó/Ó0Ð0Ø€Lr/   c                óü  — t        | t        «      s7t        | t        «      s't        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        «      r:t        |t        «      s*t        dt	        |«      › d| › d
|› dt        |«      › d�	«      ‚|�x||j                  «        k  s||j                  «       k\  rQt        dt	        |«      › d| › d
|› d|j                  «       › d|j                  «       › d|j                  «       › d�«      ‚|€�Œ|dk  s�Œ	||j                  «       z  ||<   �Œ! 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 rA   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 < )rB   ÚintrC   r9   Ú	_get_nameÚtyper8   r   r   Ú	enumerater7   r   Údimr?   )	Úin_dimsr#   Úfuncr<   Ú	args_specr;   Úir>   r=   s	            r'   Ú_process_batched_inputsrW   f   sa  € ô �gœsÔ#¬J°wÄÔ,FÜØ”I˜d“OÐ$ J¨w¨ið 86ä6:¸7³m°_ÀAðGó
ð 	
ô
 ˆ4ƒy�A‚~ÜØ”I˜d“OÐ$ð %)ð *ó
ð 	
ô (¨Ó-Ñ€IˆyÜ,¨W°iÓ@€LØÐÜØ”I˜d“OÐ$ J¨w¨ið 8%ä%1°'Ó%:¸1Ñ%=Ð$>ð ?Ø&˜K qð*ó
ð 	
ô &¤c¨)°\Ó&BÓCó 1Ñˆ‰=ˆC�Ü˜&¤#Ô&¨6Ð+=ÜØœ	 $›Ð(¨
°7°)ð <Ø$˜Xð &0ð1óð ô
 �fœcÔ"¬:°c¼6Ô+BÜØœ	 $›Ð(¨
°7°)ð <Ø$˜XÐ%LÜ˜“9�+ð ;ð<óð ð Ð 6¨S¯W©W«Y¨JÒ#6¸&ÀCÇGÁGÃIÒ:MÜØœ	 $›Ð(¨
°7°)ð <Ø$˜Xð &%Ø%(§W¡W£Y Kð 0Ø—G‘G“I�;˜m¨C¯G©G«I¨;°að9óð ð Ò &¨1¤*Ø$ s§w¡w£yÑ0ˆL˜‹Oð-1ô2 	% \°9Ó=ØØØð	ð r/   c           	     ó€   — t        | |«      D ��cg c]  \  }}|€|nt        |||«      ‘Œ }}}t        ||«      S c c}}w r   )r7   r   r   )r;   r<   Ú
vmap_levelrU   r=   r>   Úbatched_inputss          r'   Ú_create_batched_inputsr[   ¥   sR   € ô ˜|¨YÓ7÷áˆF�Cð ˆ~‰¤>°#°v¸zÓ#JÑJð€Nñ ô ˜.¨)Ó4Ð4ùó	s   �:c           
     ó  — |€9t        |t        j                  «      rt        |«      rt	        d| › d| › d�«      ‚|S t        |t        j                  «      st	        d| › d| › dt        |«      › d�«      ‚t        ||||«      S )NrL   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?)rB   r   r   r   r9   rP   r   )ÚnameÚbatched_outputrY   Ú
batch_sizeÚout_dims        r'   Ú_maybe_remove_batch_dimra   ³   s©   € ð €Ü�n¤e§l¡lÔ3Ô8HØô9
ô Ø˜�v˜Y t fð -5ð 6óð ð Ðô �n¤e§l¡lÔ3ÜØ�D�6˜ 4 &ð )!Ü!% nÓ!5Ð 6ð 7@ð@ó
ð 	
ô ˜^¨Z¸ÀWÓMÐMr/   c                óÀ  ‡‡‡— t        | «      \  }Šdˆˆˆfd„}g }t        | t        j                  «      rLt        ‰t        «      r‰g}nPt        ‰t
        «      rt        ‰«      dk(  rt        ‰«      }n&‰€‰g}n  |«        nt        ‰‰«      }|€ |«        n|}t        ||«      D �	�
cg c]  \  }	}
t        t        ‰«      |	|||
«      ‘Œ }}	}
t        |‰«      S c c}
}	w )Nc                 ó^   •— t        dt        ‰ «      › d‰› dt        ‰«      d   › d‰› d�	«      ‚)NrL   ú, ..., out_dims=z`)(<inputs>): out_dims is not compatible with the structure of `outputs`. out_dims has structure rA   z but outputs has structure rM   )r9   rO   r   )rT   Úout_dimsÚoutput_specs   €€€r'   Úincompatible_errorz+_unwrap_batched.<locals>.incompatible_errorÙ   sJ   ø€ ÜØ”I˜d“OÐ$Ð$4°X°Jð ?&ä&2°8Ó&<¸QÑ&?Ð%@ð AØ(˜M¨ð,ó
ð 	
r/   rA   )r+   r   )r   rB   r   r   rN   rC   r8   Úlistr   r7   ra   rO   r   )rD   re   rY   r_   rT   Úflat_batched_outputsrg   Úflat_out_dimsÚbroadcast_resultr^   r`   Úflat_outputsrf   s    `  `       @r'   Ú_unwrap_batchedrm   Ð   sæ   ú€ ô )5°_Ó(EÑ%Ð˜+÷
ð ')€MÜ�/¤5§<¡<Ô0ô �h¤Ô$Ø%˜J‰MÜ˜¤%Ô(¬S°«]¸aÒ-?Ü  ›N‰MØÐØ%˜J‰MáÕ ä4°X¸{ÓKÐØÐ#ÙÕ à,ˆMô (+Ð+?ÀÓ'O÷	ñ $ˆN˜Gô 	 Ü�d‹O˜^¨Z¸ÀWõ	
ð€Lñ ô ˜,¨Ó4Ð4ùós   Â)"Cc                ó`   — t        | t        «      ry | €y t        dt        |«      › d|› d�«      ‚)NrL   rd   zˆ): `out_dims` must be an int, None or a python collection of ints representing where in the outputs the vmapped dimension should appear.)rB   rN   r9   rO   )ÚxrT   re   s      r'   Ú_check_int_or_nonerp   ý   sA   € Ü�!”SÔØØ€yØÜ
Ø
”	˜$“Ð Ð 0°°
ð ;+ð 	,óð r/   c                ó^   — t        | t        «      ry t        t        t        || ¬«      | «       y )N)rT   re   )rB   rN   r   r   rp   )re   rT   s     r'   Ú$_check_out_dims_is_int_or_int_pytreerr   	  s%   € ô �(œCÔ ØÜŒgÔ(¨t¸hÔGÈÕRr/   c                ó®   — t        | d«      r| j                  S t        | t        j                  «      rdt        | j                  «      › d�S t        | «      S )NÚ__name__zfunctools.partial(z, ...))Úhasattrrt   rB   r,   r   rO   rT   Úrepr)rT   s    r'   rO   rO     sK   € Üˆt�ZÔ Ø�}‰}Ðä�$œ	×)Ñ)Ô*Ø#¤I¨d¯i©iÓ$8Ð#9¸Ð@Ð@ô
 �‹:Ðr/   c           	     ó¸   — t        «        t        || «       t        ||| «      \  }}}	}
|�t        |	|||«      }t	        | |||
||fi |¤ŽS t        | |||	|
||fi |¤ŽS r   )r   rr   rW   Ú_get_chunked_inputsÚ_chunked_vmapÚ
_flat_vmap)rT   rS   re   Ú
randomnessÚ
chunk_sizer#   r$   r_   r;   r<   rU   Úchunks_flat_argss               r'   Ú	vmap_implr~     s£   € ô ÔÜ(¨°4Ô8Ü5LØ��tó6Ñ2€J�˜i¨ð ÐÜ.Ø�| Z°ó
Ðô ØØØØØØñ
ð ñ
ð 	
ô ØØØØØØØñ	ð ñ	ð 	r/   c                óR   — | |z  }|g|z  }| |z  }|dk7  r|j                  |«       |S )Nr   )Úappend)Útotal_elemsr|   Ún_chunksÚchunk_sizesÚ	remainders        r'   Úget_chunk_sizesr…   H  s=   € Ø˜jÑ(€HØ�, Ñ)€Kà˜jÑ(€IØ�A‚~Ø×Ñ˜9Ô%ØÐr/   c                ó²   ‡— |fŠ|�*t        ||«      }t        t        j                  |«      «      Št        ˆfd„t	        | |«      D «       «      }t	        |Ž }|S )Nc              3  ól   •K  — | ]+  \  }}|�|j                  ‰|¬«      n|gt        ‰«      z  –— Œ- y ­w)N©rR   )Útensor_splitr8   )r3   Útr=   Ú
split_idxss      €r'   r6   z&_get_chunked_inputs.<locals>.<genexpr>]  sQ   øè ø€ ò 
ñ ˆAˆvð Ð!ð �N‰N˜:¨6ˆNÔ2ð ðô �*‹oñóñ
ùs   ƒ14)r…   rC   Ú	itertoolsÚ
accumulater7   )r<   r;   r_   r|   rƒ   Úflat_args_chunksr}   r‹   s          @r'   rx   rx   R  sh   ø€ ð �€JØÐÜ% j°*Ó=ˆÜœ9×/Ñ/°Ó<Ó=ˆ
äó 
ô ˜Y¨Ó5ô
ó 
Ðô Ð,Ð-ÐØÐr/   c                ó¤   — g }d }| D ]&  }t        |«      \  }}|j                  |«       |�Œ%|}Œ( t        t        |Ž «      }|€t	        d«      ‚||fS )Nzarg_spec must not be None)r   r€   rh   r7   ÚAssertionError)Úchunks_output_Úflat_chunks_outputÚarg_specÚoutputÚflat_outputÚ	arg_specsÚflat_output_chunkss          r'   Ú_flatten_chunks_outputr˜   o  sv   € ð
 +-ÐØ $€HØ ò !ˆÜ!-¨fÓ!5Ñˆ�YØ×!Ñ! +Ô.ØÑØ ‰Hð	!ô œcÐ#5Ð6Ó7ÐØÐÜÐ8Ó9Ð9Ø˜xÐ'Ð'r/   c                óX  — t        | |«      }|€t        d«      ‚t        |«      t        |«      k7  r#t        dt        |«      › dt        |«      › �«      ‚g }t        |«      D ]F  \  }}||   }|€t        d|› d�«      ‚|j	                  t        j                  ||¬«      «       d ||<   ŒH |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�   r8   rQ   r€   r   Úcat)re   r“   r—   rj   r•   Úidxr`   Úchunks           r'   Ú_concat_chunked_outputsr�   „  sÐ   € ô .¨h¸ÓA€MØÐÜÐ=Ó>Ð>Ü
ˆ=ÓœSÐ!3Ó4Ò4ÜØ!¤# mÓ"4Ð!5Ð5QÔRUÐVhÓRiÐQjÐkó
ð 	
ð !#€KÜ! -Ó0ò '‰ˆˆWØ" 3Ñ'ˆØˆ=Ü  ?°3°%Ð7HÐ!IÓJÐJØ×Ñœ5Ÿ9™9 U°Ô8Ô9à"&Ð˜3Òð'ð Ðr/   c                ó†  — g }|dk(  rt        j                  «       nd }|D ]W  }	t        |	«      }
t        ||
«      }|dk(  rŒ |�t        j                  |«       |j                  t        | |||
|||fi |¤Ž«       ŒY t        |«      \  }}~t        ||t        t        t        t        df   d z     |«      «      }t        ||«      S )NÚsamer   .)r   Úget_rng_staterh   r?   Úset_rng_stater€   rz   r˜   r�   r   rC   r   r   )rT   r;   r}   rU   re   r{   r$   Úchunks_outputÚrsÚflat_args_tupler<   r_   r—   r“   r•   s                  r'   ry   ry   ž  sí   € ð  "€MØ",°Ò"6Œ×	Ñ	Ô	¸D€BØ+ò 
ˆÜ˜Ó)ˆ	Ü1°,À	ÓJˆ
ð ˜Š?Øàˆ>Ü×Ñ Ô#Ø×ÑÜØØØØØØØñ	ð ñ	õ	
ð'
ô@ $:¸-Ó#HÑ Ð˜ð 	ô
 *Ø�(œD¤¤e¬C°¨H¡o¸Ñ&<Ñ!=Ð?QÓRó€Kô
 ˜+ xÓ0Ð0r/   c                ó(   — | dvrt        d| › �«      ‚y )N)ÚerrorÚ	differentrŸ   zLOnly allowed values for randomness are 'error', 'different', or 'same'. Got )ÚRuntimeError)r{   s    r'   Ú_check_randomness_argr©   Û  s)   € ØÐ7Ñ7ÜØZÐ[eÐZfÐgó
ð 	
ð 8r/   c              #  ó`   K  — 	 t        | |«      }|–— t        «        y # t        «        w xY w­wr   )r   r   )r_   r{   rY   s      r'   Úvmap_increment_nestingr«   â  s*   è ø€ ð"Ü,¨Z¸ÓDˆ
ØÒäÕ!øÔÕ!üs   ‚.„ ”.Ÿ+«.c                ó�   — t        ||«      5 }t        ||||«      }	 | |	i |¤Ž}
t        |
|||| «      cd d d «       S # 1 sw Y   y xY wr   )r«   r[   rm   )rT   r_   r;   r<   rU   re   r{   r$   rY   rZ   rD   s              r'   rz   rz   í  s^   € ô 
  
¨JÓ	7ð X¸:Ü/Ø˜) Z°ó
ˆñ  Ð9°&Ñ9ˆÜ˜°¸*ÀjÐRVÓW÷X÷ Xò Xús	   �%<¼Ac                ó    ‡ ‡‡‡— dˆˆ ˆˆfd„}|S )Nc                 óŠ   •— t        ‰‰«      5 }t        | ‰|«      } ‰|i |¤Ž}t        ||«      cd d d «       S # 1 sw Y   y xY wr   )r«   Úwrap_batchedÚunwrap_batched)	r#   r$   rY   rZ   rD   r_   rT   rS   r{   s	        €€€€r'   Úinnerzrestore_vmap.<locals>.inner  sK   ø€ Ü# J°
Ó;ð 	?¸zÜ)¨$°¸ÓDˆNÙ" NÐ=°fÑ=ˆOÜ! /°:Ó>÷	?÷ 	?ò 	?ús	   Ž!9¹A)r#   r   r$   r   r+   útuple[Any, Any]r2   )rT   rS   r_   r{   r±   s   ```` r'   Úrestore_vmapr³     s   û€ ÷?ð ?ð €Lr/   c                óp   — t        | «      \  }}t        ||«      }|€t        d«      ‚t        ||||«      }|S )Nzflat_bdims must not be None)r   r   r�   r[   )r#   ÚbdimsÚlevelr<   ÚspecÚ
flat_bdimsÚresults          r'   r¯   r¯     sE   € ô # 4Ó(�O€IˆtÜ*¨5°$Ó7€JØÐÜÐ:Ó;Ð;Ü# J°	¸5À$ÓG€FØ€Mr/   c                ó<  — t        | «      \  }}t        |«      dk(  r| dfS |D �cg c]J  }t        |t        j                  «      r*t        j
                  j                  j                  ||«      n|d f‘ŒL }}t        |Ž \  }}t        ||«      t        ||«      fS c c}w )Nr   r2   )
r   r8   rB   r   r   Ú_CÚ
_functorchrm   r7   r   )r#   r¶   r<   r·   r>   r¹   r”   rµ   s           r'   r°   r°   *  s¦   € Ü" 4Ó(�O€IˆtÜ
ˆ9ƒ~˜ÒØ�Rˆxˆð öð ô ˜#œuŸ|™|Ô,ô �H‰H×Ñ×/Ñ/°°UÔ;à�t�ñð€Fð ô ˜�L�M€FˆEÜ˜& $Ó'¬¸¸tÓ)DÐDÐDùòs   ¥AB)r%   úCallable[_P, _R]r+   r½   )r;   úlist[int | None]r<   ú	list[Any]r+   rN   )rD   úTensor | tuple[Tensor, ...]r+   rN   )rG   ztuple[_R, ...] | _RrH   rN   rI   zCallable[[], str]r+   ztuple[_R, ...])rS   Ú	in_dims_tr#   útuple[Any, ...]rT   úCallable[..., Any]r+   z1tuple[int, list[int | None], list[Any], TreeSpec])
r;   r¾   r<   r¿   rY   rN   rU   r   r+   rÂ   )r]   Ústrr^   r   rY   rN   r_   rN   r`   ú
int | Noner+   ztorch.Tensor)rD   rÀ   re   Ú
out_dims_trY   rN   r_   rN   rT   rÃ   r+   rÂ   )ro   r   rT   rÃ   re   rÆ   r+   ÚNone)re   rÆ   rT   rÃ   r+   rÇ   )rT   rÃ   r+   rÄ   )rT   ú)Callable[_P, Tensor | tuple[Tensor, ...]]rS   rÁ   re   rÆ   r{   rÄ   r|   rÅ   r#   r)   r$   r*   r+   r   )r�   rN   r|   rN   r+   z	list[int])
r<   r¿   r;   r¾   r_   rN   r|   rÅ   r+   úIterable[tuple[Any, ...]])r‘   r¿   r+   z&tuple[list[tuple[Any, ...]], TreeSpec])re   rÆ   r“   r   r—   zlist[tuple[Any, ...] | None]r+   zlist[Tensor])rT   rÈ   r;   r¾   r}   rÉ   rU   r   re   rÆ   r{   rÄ   r$   r   r+   r   )r{   rÄ   r+   rÇ   )r_   rN   r{   rÄ   r+   zGenerator[int, None, None])rT   z*Callable[..., Tensor | tuple[Tensor, ...]]r_   rN   r;   r¾   r<   r¿   rU   r   re   rÆ   r{   rÄ   r$   r   r+   r   )
rT   zCallable[..., _R]rS   rÁ   r_   rN   r{   rÄ   r+   zCallable[..., tuple[Any, Any]])r#   rÂ   rµ   rÁ   r¶   rN   r+   rÂ   )r#   r   r¶   rN   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   rN   rC   rÁ   rÆ   r.   r?   rE   rJ   rW   r[   ra   rm   rp   rr   rO   r~   r…   rx   r˜   r�   ry   r©   Úcontextmanagerr«   rz   r³   r¯   r°   r2   r/   r'   ú<module>rÓ      sé  ðõ #ã Û Û Ý $Ý ß 5Ó 5ß 0ã Ý Ý 0÷õ ÷õ ñ ß3ñ ˆtƒ_€ÙˆTƒ]€à�%˜˜S˜‘/Ñ!€	Ø�5˜˜c˜‘?Ñ" TÑ)€
óðØ"ðØ/8ðàóó$ð	Øð	àð	ð ,ð	ð ó		ð7Øð7Ø-ð7Ø5Gð7à6ó7ð~5Ø"ð5àð5ð ð5ð ð	5ð
 ó5ðNØ
ðNàðNð ðNð ð	Nð
 ðNð óNð:*5Ø0ð*5àð*5ð ð*5ð ð	*5ð
 ð*5ð ó*5óZ	ðSØðSØ 2ðSà	óSó
ð'Ø
3ð'àð'ð ð'ð ð	'ð
 ð'ð ð'ð ð'ð 	ó'óTðØðà"ðð ðð ð	ð
 óð:(Øð(à+ó(ð*Øðàðð 5ðð ó	ð491Ø
3ð91à"ð91ð 0ð91ð ð	91ð
 ð91ð ð91ð ð91ð 	ó91óz
ð ×Ñð"Øð"Ø!$ð"àò"ó ð"ðXØ
4ðXàðXð #ðXð ð	Xð
 ðXð ðXð ðXð ðXð 	óXðL	Ø
ð	Ø&/ð	Ø=@ð	ØNQð	à#ó	ðØ
ðØ"+ðØ47ðàóôEr/   