Ë
    [^(hôc  ã                   ó  — d dl Z d dl mZ d dlZd dlmZ d dlmZmZmZ d dl	m
Z d dlmZ d dlmZmZ d dlmc mZ d dlmZ d dlZd	„ Zd
„ Zd„ Zd„ Zd„ Zdd„Zd„ Zd„ Zd„ Z d„ Z!d„ Z"dd„Z#d„ Z$d„ Z%d„ Z&dd„Z'	 	 ddefd„Z(ddefd„Z)y) é    N)ÚTensor)ÚTorchDispatchMode)Útree_mapÚtree_flattenÚtree_unflatten)Ú_pytree)Úpartial)Úno_dispatchÚall_same_mode)ÚCallablec                 ód   — | j                   } || «      } ||«      }||k(  ry t        d|› d�«      ‚)Nz.This operator is not Composite Compliant: the zR of the tensor was modified directly without going through the PyTorch dispatcher.)ÚelemÚRuntimeError)Úwrapper_tensorÚmetadata_nameÚmetadata_accessorr   Úmetadata_wrapper_tensorÚmetadata_elems         új/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/testing/_internal/composite_compliance.pyÚcheck_attr_consistencyr      sL   € Ø×Ñ€DÙ/°Ó?ÐÙ% dÓ+€MØ -Ò/ØÜ
Ø
8Øˆ/ð 0ð	1ó2ð 2ó    c                 óî   — t        | |«      sy t        j                  d„ d„ t        j                  t        j                  t        j
                  dœ}|j                  «       D ]  \  }}t        | ||«       Œ y )Nc                 ó   — | j                   S ©N)Údtype©Úxs    r   ú<lambda>z,check_metadata_consistency.<locals>.<lambda>"   s
   € ˜1Ÿ7™7€ r   c                 ó   — | j                   S r   )Údevicer   s    r   r   z,check_metadata_consistency.<locals>.<lambda>#   s
   € ˜AŸH™H€ r   )Úshaper   r    ÚnumelÚstrideÚstorage_offset)Ú
isinstancer   Úsizer"   r#   r$   Úitemsr   )r   ÚCCTÚthings_to_checkr   r   s        r   Úcheck_metadata_consistencyr*      si   € ä�n cÔ*Øä—‘Ù"Ù$Ü—‘Ü—-‘-Ü ×/Ñ/ñ€Oð -<×,AÑ,AÓ,Cò QÑ(ˆÐ(Ü˜~¨}Ð>OÕPñQr   c                 ó2   — | j                   j                  dv S )N>"   ÚtÚimagÚrealÚviewÚ_conjÚaliasÚchunkÚsliceÚsplitÚdetachÚexpandÚhsplitÚnarrowÚselectÚunbindÚunfoldÚvsplitÚmovedimÚpermuteÚsqueezeÚview_asÚdiagonalÚswapaxesÚ	expand_asÚ	transposeÚ	unflattenÚ	unsqueezeÚ
as_stridedÚ_unsafe_viewÚtensor_splitÚview_as_realÚ_reshape_aliasÚview_as_complexÚsplit_with_sizes©ÚoverloadpacketÚ__name__©Úfuncs    r   Ú
is_view_fnrS   +   s    € Ø×Ñ×'Ñ'ð #,ð #ð #r   c                 ó2   — | j                   j                  dv S )N>   Út_Údetach_Úsqueeze_Ú	swapaxes_Ú	swapdims_Ú
transpose_Ú
unsqueeze_Úas_strided_rN   rQ   s    r   Úis_inplace_view_fnr]   S   s    € Ø×Ñ×'Ñ'ð 	,ð 	ð 	r   c                 óš   — | j                   j                  }t        j                  d|«      ryt        j                  d|«      ry|d   dk(  S )Nz__i.+__Tz__.+__FéÿÿÿÿÚ_)rO   rP   ÚreÚmatch)rR   Únames     r   Ú
is_inplacerd   a   sC   € Ø×Ñ×'Ñ'€DÜ	‡x�x�	˜4Ô ØÜ	‡x�x�˜$ÔØØ�‰8�s‰?Ðr   c                 ór   ‡ ‡—  G ˆfd„dt         j                  «      Š G ˆˆ fd„dt        «      }‰ |«       fS )Nc                   ó`   •— e Zd ZU ej                  ed<   dgZed„ «       Zd„ Z	e
dˆ fd„	«       Zy)ú7generate_cct_and_mode.<locals>.CompositeCompliantTensorr   c                 óÄ  — t        |«      | usJ d«       ‚t        j                  j                  | |j	                  «       |j
                  |j                  |j                  |j                  |j                  «       |j                  «       ¬«      }|j                  r›t        j                  d|j
                  |j                  |j                  d¬«      }|j                  |j                  «       j                  «       |j                  «       |j	                  «       |j                  «       ¬«       ||_        n||_        |j                  «       |j                  j                  «       k(  sJ ‚t        j                   j#                  ||j                  j%                  «       «       t        j                   j'                  ||j                  j)                  «       «       ||_        |S )NzRWrapping a CompositeCompliantTensor in a CompositeCompliantTensor is not supported)r   Úlayoutr    Úrequires_gradÚstridesr$   © F)r   r    ri   rj   )Úsourcer$   r&   r#   )ÚtypeÚtorchr   Ú_make_wrapper_subclassr&   r   ri   r    rj   r#   r$   ÚemptyÚset_Úuntyped_storageÚcloner   Ú_CÚ	_set_conjÚis_conjÚ_set_negÚis_negÚmode)Úclsr   rz   ÚargsÚkwargsÚrÚtmps          r   Ú__new__z?generate_cct_and_mode.<locals>.CompositeCompliantTensor.__new__y   sl  € ä˜“: SÑ(ð eØdóeÐ(ô —‘×3Ñ3Ø�T—Y‘Y“[Ø—j‘j¨¯©Ø—{‘{°$×2DÑ2DØŸ™›°d×6IÑ6IÓ6Kð	 4ó MˆAð ×!Ò!ô —k‘kØØŸ*™*ØŸ;™;ØŸ;™;Ø"'ô�ð —‘Ø×/Ñ/Ó1×7Ñ7Ó9Ø#'×#6Ñ#6Ó#8ØŸ™›ØŸ;™;›=ð	 ô ð �•à�”à—8‘8“: §¡§¡£Ò0Ð0Ð0ô
 �H‰H×Ñ˜q !§&¡&§.¡.Ó"2Ô3Ü�H‰H×Ñ˜a §¡§¡£Ô1àˆAŒFØˆHr   c                 ó"   — d| j                   › d�S )NzCompositeCompliantTensor(ú))r   )Úselfs    r   Ú__repr__z@generate_cct_and_mode.<locals>.CompositeCompliantTensor.__repr__©   s   € Ø.¨t¯y©y¨k¸Ð;Ð;r   Nc                 óÐ   •— t        j                  |i |xs i ¤Ž}t        ˆfd„|D «       «      }t        |«      st	        d«      ‚|d   5   ||i |¤Žcd d d «       S # 1 sw Y   y xY w)Nc              3   óP   •K  — | ]  }t        |‰«      sŒ|j                  –— Œ y ­wr   )r%   rz   )Ú.0ÚeÚCompositeCompliantTensors     €r   ú	<genexpr>z]generate_cct_and_mode.<locals>.CompositeCompliantTensor.__torch_dispatch__.<locals>.<genexpr>¯   s   øè ø€ Ò^ Q´jÀÐD\Õ6]˜!Ÿ&�&Ñ^ùs   ƒ&•&z*Multiple CompositeCompliantTensorModes NYIr   )ÚpytreeÚarg_tree_leavesÚtupler   r   )r{   rR   Útypesr|   r}   Úall_argsÚmodesr‰   s          €r   Ú__torch_dispatch__zJgenerate_cct_and_mode.<locals>.CompositeCompliantTensor.__torch_dispatch__¬   si   ø€ ä×-Ñ-¨tÐF¸ºÀ"ÑFˆHÜÓ^¨(Ô^Ó^ˆEÜ  Ô'Ü"Ð#OÓPÐPØ�q‘ñ -Ù˜TÐ, VÑ,÷-÷ -ò -ús   Á
AÁA%©rl   N)rP   Ú
__module__Ú__qualname__ro   r   Ú__annotations__Ú	__slots__Ústaticmethodr€   r„   Úclassmethodr‘   )r‰   s   €r   r‰   rg   t   s@   ø… Ø�l‰lÓà�Hˆ	à	ñ-	ó 
ð-	ò^	<ð 
ô	-ó 
ñ	-r   r‰   c                   ó   •— e Zd Zdˆ ˆfd„	Zy)ú;generate_cct_and_mode.<locals>.CompositeCompliantTensorModeNc                 óô  •‡ — ˆfd„}ˆˆ fd„}|t         j                  j                  j                  j                  k(  rt        d«      ‚|j                  j                  dv rt        |j                  › d�«      ‚t        |«      rA|d   }t        |‰«      s0t        ˆfd„|dd  D «       «      rt        d	|j                  › d
�«      ‚t        ||«      }t        ||«      }	 ||i |	¤Ž}
t        ||
«      }t        |«      rj‰rht        «       5   ||i |¤Ž}t        |t        t        f«      r&t!        ||«      D ]  \  }}|j#                  |«       Œ n|j#                  |«       d d d «       t        «       5  t%        |«      r ||i |¤Ž d d d «       t'        t(        ‰¬«      }t+        j,                  ||«       t+        j,                  ||«       t+        j,                  ||«       |S # 1 sw Y   Œ„xY w# 1 sw Y   ŒjxY w)Nc                 ó8   •— t        | ‰«      r| j                  S | S r   ©r%   r   )rˆ   r‰   s    €r   Úunwrapz^generate_cct_and_mode.<locals>.CompositeCompliantTensorMode.__torch_dispatch__.<locals>.unwrap·   s   ø€ Ü!+¨AÐ/GÔ!H�q—v‘vÐOÈaÐOr   c                 óN   •— t        | t        j                  «      r	 ‰| ‰«      S | S r   ©r%   ro   r   )rˆ   r‰   rƒ   s    €€r   Úwrapz\generate_cct_and_mode.<locals>.CompositeCompliantTensorMode.__torch_dispatch__.<locals>.wrapº   s$   ø€ Ü<FÀqÌ%Ï,É,Ô<WÑ/°°4Ó8Ð^Ð]^Ð^r   z±.item() is not allowed to be called inside of composite functions in the PyTorch library because not all backends and/or Tensor subclasses (e.g. vmap, ProxyTensor) support them.)rr   Úresize_z; is not allowed to be called inside of Composite operators.r   c              3   ó6   •K  — | ]  }t        |‰«      –— Œ y ­wr   )r%   )r‡   Úar‰   s     €r   rŠ   zagenerate_cct_and_mode.<locals>.CompositeCompliantTensorMode.__torch_dispatch__.<locals>.<genexpr>Í   s   øè ø€ ÒVÈœJ qÐ*B×CÑVùs   ƒé   z7Not composite compliant: performing in-place operation zŽ where the Tensor being written to is regular Tensor but the other tensors are Tensor Subclasses. Please try to avoid this in-place operation.)r(   )ro   ÚopsÚatenÚ_local_scalar_denseÚdefaultr   rO   rP   rd   r%   Úanyr   rS   r
   r�   ÚlistÚziprr   r]   r	   r*   r‹   Ú	tree_map_)rƒ   rR   rŽ   r|   r}   rž   r¡   Úmutated_argumentÚunwrapped_argsÚunwrapped_kwargsÚunwrapped_rsÚrsÚresultr¤   ÚbÚcheckr‰   Úautograd_view_consistencys   `               €€r   r‘   zNgenerate_cct_and_mode.<locals>.CompositeCompliantTensorMode.__torch_dispatch__¶   sý  ù€ ôPõ_ð ”u—y‘y—~‘~×9Ñ9×AÑAÒAÜ"ðVóWð Wð
 ×"Ñ"×+Ñ+Ð/BÑBÜ"Ø—}‘}�oð &+ð ,ó-ð -ô ˜$Ôð $(¨¡7Ð Ü!Ð"2Ð4LÔMÜÓVÈTÐRSÐRTÈXÔVÔVÜ&ØQØŸ=™=˜/ð *GðGóHð Hô & f¨dÓ3ˆNÜ'¨°Ó7ÐÙ ÐDÐ3CÑDˆLÜ˜$ Ó-ˆBä˜$ÔÑ$=ô !“]ñ (ñ " 4Ð2¨6Ñ2�FÜ! &¬5´$¨-Ô8Ü$'¨¨F£Oò &™D˜A˜qØŸF™F 1�Iñ&ð Ÿ™ œ÷#(ô, “ñ *Ü% dÔ+Ù˜$Ð) &Ò)÷*ô Ô6Ð<TÔUˆEÜ×Ñ˜U DÔ)Ü×Ñ˜U FÔ+Ü×Ñ˜U BÔ'ØˆI÷C(ð (ú÷,*ð *ús   Ä	AG"Å1G.Ç"G+Ç.G7r’   )rP   r“   r”   r‘   )r‰   r¶   s   €€r   ÚCompositeCompliantTensorModerš   µ   s	   ø„ ÷J	r   r·   )ro   r   r   )r¶   r·   r‰   s   ` @r   Úgenerate_cct_and_moder¸   j   s5   ù€ ö?-¤5§<¡<ô ?-÷BKÔ'8ô KðZ $Ñ%AÓ%CÐCÐCr   c                 óÌ   — t        | t        «      st        | t        «      syt        | «      dk(  ryt	        d„ | D «       «      }|ryt	        d„ | D «       «      }|rt        d«      ‚y)NFr   c              3   óP   K  — | ]  }t        |t        j                  «      –— Œ  y ­wr   r    ©r‡   Úelts     r   rŠ   z is_tensorlist.<locals>.<genexpr>	  s   è ø€ ÒC¸”j ¤e§l¡l×3ÑCùó   ‚$&Tc              3   óP   K  — | ]  }t        |t        j                  «      –— Œ  y ­wr   r    r»   s     r   rŠ   z is_tensorlist.<locals>.<genexpr>  s   è ø€ ÒI¸cœJ s¬E¯L©L×9ÑIùr½   zVThis test assumes that PyTorch APIs cannot take mixed lists of Tensor and other things)r%   r«   r�   ÚlenÚallr   )ÚlstÚall_tensorsÚexists_one_tensors      r   Úis_tensorlistrÄ     sh   € Ü�cœ4Ô ¬°C¼Ô)?ØÜ
ˆ3ƒx�1‚}ØÜÑC¸sÔCÓC€KÙØÜÑIÀSÔIÓIÐÙÜð Dó Eð 	Eàr   c                 ó   — |r | |«      S |S r   rl   )ÚfnÚ
should_mapÚargs      r   Ú	maybe_maprÉ     s   € Ù ‰2ˆc‹7Ð) cÐ)r   c                 ó¬   — t        | t        j                  «      r	 || |«      S t        | «      r| D �cg c]  } |||«      ‘Œ c}S t	        d«      ‚c c}w )Nz*wrap assumes that the input can be wrapped)r%   ro   r   rÄ   r   )rÈ   r(   Úcct_moder¤   s       r   r¡   r¡     sN   € ä�#”u—|‘|Ô$Ù�3˜Ó!Ð!Ü�SÔØ*-Ö. Q‘�A�xÕ Ò.Ð.Ü
ÐCÓ
DÐDùò /s   ³Ac              #   ól  K  — | D �cg c])  }t        |t        j                  «      xs t        |«      ‘Œ+ }}|D �cg c]  }|rddgndg‘Œ }}t	        j
                  |Ž D ]A  }t        || «      D ��cg c]"  \  }}t        t        t        ||¬«      ||«      ‘Œ$ }	}}|	|f–— ŒC y c c}w c c}w c c}}w ­w)NFT)r(   rË   )
r%   ro   r   rÄ   Ú	itertoolsÚproductr¬   rÉ   r	   r¡   )
Ú	flat_argsr(   rË   rÈ   Úis_tensor_likesÚis_tensor_likeÚsubclass_optionsÚwhich_args_are_wrappedÚshould_wrap_argr³   s
             r   Úgenerate_subclass_choicesrÕ   *  sÊ   è ø€ àV_Ö`Ès”z #¤u§|¡|Ó4ÒJ¼ÀcÓ8JÑJÐ`€OÐ`Ø[jÖkÈ©˜ ™¸e¸WÑDÐkÐÐkä"+×"3Ñ"3Ð5EÐ"Fò -Ðô /2Ð2HÈ)Ó.T÷VÙ*�o sô œG¤D¨c¸HÔEÀÐX[Õ\ð Vˆñ VàÐ,Ð,Ó,ñ	-ùò aùÚkùóVùs&   ‚B4‡.B$µB4»B)Á&B4Á1'B.ÂB4c              #   ó(  K  — t        |«      \  }}t        | «      t        |«      z   }t        |||«      D ]Y  \  }}|d t        | «       }	t	        |t        | «      d  |«      }
|d t        | «       }t	        |t        | «      d  |«      }|	|
||f–— Œ[ y ­wr   )r   r«   rÕ   r¿   r   )r|   r}   r(   rË   Úflat_kwargsÚspecÚflat_args_kwargsÚchoiceÚdebug_metadataÚnew_argsÚ
new_kwargsrÓ   Úwhich_kwargs_are_wrappeds                r   Ú%generate_subclass_choices_args_kwargsrß   9  s«   è ø€ ä$ VÓ,Ñ€K�Ü˜D“z¤D¨Ó$5Ñ5ÐÜ";Ð<LÈcÐS[Ó"\ò UÑˆ�Ø˜*œ3˜t›9Ð%ˆÜ# F¬3¨t«9¨:Ð$6¸Ó=ˆ
Ø!/°
´°T³Ð!;ÐÜ#1°.ÄÀTÃÀÐ2LÈdÓ#SÐ Ø˜
Ð$:Ð<TÐTÓTñUùs   ‚BBc                 ó"   — t        d|› d�«      | ‚)Nz8Composite compliance check failed with the above error.
a(  If you are adding an OpInfo of an existing operator, please feel free to skip this test because the problem was pre-existing and file an issue. Otherwise, if you added a new operator, please read through the Composite Compliance section in aten/src/ATen/native/README.md for how to resolve this. )r   )ÚerrÚadditional_infos     r   Ú raise_composite_compliance_errorrã   E  s+   € Ü
ð	àÐ
ð	Cð	Có
ð ð
r   c           
      óø   ‡— t        «       \  Š} | |i |¤Ž}t        ||‰|«      D ]*  }|\  }}}	}
	  | |i |¤Ž}ˆfd„} |t	        |«      |«       Œ, y # t        $ r}t        |d|	› d|
› d�«       Y d }~Œ<d }~ww xY w)Nú- wrapped_args: ú
- wrapped_kwargs: ú
c                 ó8   •— t        | ‰«      r| j                  S | S r   r�   ©rˆ   r(   s    €r   rž   z&check_all_permutations.<locals>.unwrapw  s   ø€ Ü'¨¨3Ô/�1—6‘6Ð6°QÐ6r   )r¸   rß   r   rã   r   )Úopr|   r}   Úassert_equal_fnrË   ÚexpectedrÚ   rÜ   rÝ   rÓ   rÞ   Úactualrá   rž   r(   s                 @r   Úcheck_all_permutationsrî   [  s²   ø€ Ü)Ó+�M€CˆÙ�4Ð"˜6Ñ"€HÜ7¸¸fÀcÈ8ÓTò <ˆØQWÑNˆ�*Ð4Ð6Nð	Ù˜Ð0 ZÑ0ˆFô*	7ñ 	œ ¨Ó0°(Õ;ñ9<øô$ ò 	Ü,ØØ"Ð#9Ð":ð ;%Ø%=Ð$>¸bðB÷ñ ûð	ús   °AÁ	A9ÁA4Á4A9c                 ó   ‡	‡
— t        «       \  Š	Š
ˆ	ˆ
fd„} | |i |¤Ž}t        ||«      }t        ||«      }	 ‰
5   | |i |¤Ž}d d d «       ˆ	fd„} |t        |«      |«       y # 1 sw Y   Œ"xY w# t        $ r}t        |«       Y d }~Œ>d }~ww xY w)Nc                 óN   •— t        | t        j                  «      r	 ‰| ‰«      S | S r   r    )rˆ   r(   rË   s    €€r   r¡   zcheck_with_mode.<locals>.wrap‹  s"   ø€ Ü#-¨a´·±Ô#>‰s�1�hÓÐEÀAÐEr   c                 ó8   •— t        | ‰«      r| j                  S | S r   r�   ré   s    €r   rž   zcheck_with_mode.<locals>.unwrap™  s   ø€ Ü# A sÔ+ˆq�v‰vÐ2°Ð2r   )r¸   r   r   rã   )rê   r|   r}   rë   r¡   rì   rí   rá   rž   r(   rË   s            @@r   Úcheck_with_moderò   ˆ  sž   ù€ Ü)Ó+�M€CˆõFñ �4Ð"˜6Ñ"€Hä�D˜$Ó€DÜ�d˜FÓ#€Fð.Øñ 	)Ù˜Ð( Ñ(ˆF÷	)ô3ñ ”H˜V VÓ,¨hÕ7÷	)ð 	)ûô ò .Ü(¨×-Ñ-ûð.ús.   ·A/ ¹	A#ÁA/ Á#A,Á(A/ Á/	BÁ8BÂBc                 óÌ   — g }t        | «      \  } }t        |«      \  }}| |z   } | D ];  }t        |t        j                  «      sŒ|j                  sŒ+|j                  |«       Œ= |S r   )r   r%   ro   r   rj   Úappend)r|   r}   Úleaf_tensorsÚ
_args_specÚ_kwargs_specrÈ   s         r   Úgather_leaf_tensorsrø   ž  sm   € Ø€LÜ# DÓ)Ñ€Dˆ*Ü'¨Ó/Ñ€FˆLØ�&‰=€DØò %ˆÜ˜#œuŸ|™|Ô,ØØ×ÓØ×Ñ Õ$ð	%ð
 Ðr   c                 ó>  — |€	 | |i |¤Ž}n || g|¢­i |¤Ž}|� ||«      }t        j                  |«      }|D �cg c]  }t        |t        j                  «      sŒ|‘Œ! }}|D �cg c]  }|j
                  sŒ|‘Œ }}t        |«      dkD  sJ ‚|D �cg c]8  }t        j                  |j                  |j                  |j                  ¬«      ‘Œ: }	}t        ||«      }
t        |
«      dkD  sJ ‚t        j                  j                  ||
|	dd¬«      S c c}w c c}w c c}w )Nr   ©r    r   T©Úallow_unusedÚretain_graph)r‹   Útree_leavesr%   ro   r   rj   r¿   Úonesr!   r    r   rø   ÚautogradÚgrad)rê   r|   r}   Úoutput_process_fn_gradÚgradcheck_wrapperÚresultsÚflat_resultsr~   Úflat_diff_resultsÚgradsrõ   s              r   Úcompute_expected_gradsr  «  s  € ØÐ Ù�dÐ%˜fÑ%‰á# BÐ8¨Ò8°Ñ8ˆàÐ)Ù(¨Ó1ˆä×%Ñ% gÓ.€LØ+ÖK˜!¬z¸!¼U¿\¹\Õ/J’AÐK€LÐKØ$0ÖD˜q°A·O³OšÐDÐÐDÜÐ Ó! AÒ%Ð%Ð%àJ[Ö\ÀQŒU�Z‰Z˜Ÿ™¨¯©¸¿¹Ö@Ð\€EÐ\Ü& t¨VÓ4€LÜˆ|Ó˜qÒ Ð Ð Ü�>‰>×ÑÐ0°,Ø$°4Àdð ó Lð Lùò LùÚDùò ]s   »DÁDÁ%DÁ7DÂ=Drê   c                 óÒ  ‡— t        «       \  Š}t        | ||||«      }t        ||‰|«      D �]S  }|\  }	}
}}t        |	|
«      }t	        |«      dkD  sJ ‚	 |€	 | |	i |
¤Ž}n || g|	¢­i |
¤Ž}|� ||«      }t        j                  «      }|D �cg c]  }t        |t        j                  «      sŒ|‘Œ! }}|D �cg c]  }|j                  sŒ|‘Œ }}t	        |«      dkD  sJ ‚|D �cg c]8  }t        j                  |j                  |j                  |j                   ¬«      ‘Œ: }}t#        |‰|«      D ]M  \  }}	 t        j$                  j'                  |||dd¬«      }ˆfd	„} |t)        t+        |«      «      |d¬
«       ŒO �ŒV y # t
        $ r}t        |d|› d|› d�«       Y d }~�Œ1d }~ww xY wc c}w c c}w c c}w # t
        $ r }t        |d|› d|› d|› d�«       Y d }~Œ†d }~ww xY w)Nr   rå   ræ   rç   rú   Trû   z
- wrapped_grads: c                 ó8   •— t        | ‰«      r| j                  S | S r   r�   ré   s    €r   rž   z&check_backward_formula.<locals>.unwrap÷  s   ø€ Ü!+¨A¨sÔ!3�q—v‘vÐ:¸Ð:r   ©Ú	equal_nan)r¸   r  rß   rø   r¿   r   rã   r‹   rþ   r%   ro   r   rj   rÿ   r!   r    r   rÕ   r   r  r�   Úmap)rê   r|   r}   r  r  rë   rË   rì   rÚ   rÜ   rÝ   rÓ   rÞ   rõ   r  rá   r  r~   r  r  Úflat_new_gradsÚwhich_grad_is_batchedrí   rž   r(   s                           @r   Úcheck_backward_formular  Ç  sG  ø€ ô *Ó+�M€Cˆä% b¨$°Ð8NÐPaÓb€Hä7¸¸fÀcÈ8ÓTó ,RˆØQWÑNˆ�*Ð4Ð6NÜ*¨8°ZÓ@ˆÜ�<Ó  1Ò$Ð$Ð$ð	Ø Ð(Ù˜hÐ5¨*Ñ5‘á+¨BÐH°ÒH¸ZÑH�Ø%Ð1Ù0°Ó9�ô ×)Ñ)¨'Ó2ˆØ#/ÖO˜a´:¸aÄÇÁÕ3NšÐOˆÐOØ(4ÖH 1¸¿»šQÐHÐÐHÜÐ$Ó%¨Ò)Ð)Ð)ð ,ö-Øô —‘˜AŸG™G¨A¯H©H¸A¿G¹GÖDð -ˆð -ä5NÈuÐVYÐ[cÓ5dò 	RÑ1ˆNÐ1ð
ÜŸ™×,Ñ,Ð->ÀÈnØ:>ÈTð -ó S�ô;ñ œE¤# f¨fÓ"5Ó6¸ÈDÖQò!	Rñ9,Røô ò 	Ü,ØØ"Ð#9Ð":ð ;%Ø%=Ð$>¸bðB÷ò ûð	üò PùÚHùò-øô  ò Ü0ØØ&Ð'=Ð&>ð ?)Ø)AÐ(Bð C(Ø(=Ð'>¸bðB÷ñ ûðúsN   Á!FÂF.Â.F.Â8F3Ã
F3Ã$=F8Ä7$F=Æ	F+ÆF&Æ&F+Æ=	G&ÇG!Ç!G&c                 óä  ‡ ‡‡!‡"‡#‡$— t        d¬«      \  Š!}ˆ!fd„Š#t        ˆ#fd„|D «       «      }t        |«      \  }}t        ˆ#fd„|D «       «      }	t        |	|«      }
t	        j
                  «       5  d„ Š"ˆˆ"ˆ fd„} |||||
«      }t        t        j                  |«      }t        d„ |«      }t        d	„ |«      }t        ||‰!|«      D ]Û  }|\  }}}}t        ||
‰!|«      D ]Á  }|\  }}}}t        t        ‰"t        ||«      «      «      }|j                  «       D ��ci c]  \  }}| ‰"|||   f«      “Œ }}}	 ‰€	 ‰ |i |¤Ž}n ‰‰ g|¢­i |¤Ž}ˆ!fd„Š$t        t        j                  «      }t        ˆ$fd„|«      }t        ˆ$fd„|«      }  |||d¬«        || |d¬«       ŒÃ ŒÝ 	 d d d «       y c c}}w # t        $ r#}t        |d
|› d|› d|› d|› d�	«       Y d }~ŒŽd }~ww xY w# 1 sw Y   y xY w)NF)r¶   c                 ó  •— t        | «      ‰usJ ‚t        | t        j                  «      r!| j                  rt        j
                  | «      S t        | «      r1| D �cg c]%  }|j                  rt        j
                  |«      nd ‘Œ' c}S y c c}w r   )rn   r%   ro   r   rj   Ú
randn_likerÄ   )r,   rˆ   r(   s     €r   Úmaybe_tangentz/check_forward_ad_formula.<locals>.maybe_tangent  st   ø€ Ü�A‹w˜cÑ!Ð!Ð!ô �aœŸ™Ô&¨1¯?ª?Ü×#Ñ# AÓ&Ð&Ü˜1ÔØNOÖPÈ¨1¯?ª?”E×$Ñ$ QÔ'ÀÑDÒPÐPØùò Qs   Á*B	c              3   ó.   •K  — | ]  } ‰|«      –— Œ y ­wr   rl   ©r‡   rÈ   r  s     €r   rŠ   z+check_forward_ad_formula.<locals>.<genexpr>  s   øè ø€ Ò<°™ s×+Ñ<ùó   ƒc              3   ó.   •K  — | ]  } ‰|«      –— Œ y ­wr   rl   r  s     €r   rŠ   z+check_forward_ad_formula.<locals>.<genexpr>  s   øè ø€ ÒJ°s¡¨c× 2ÑJùr  c                 óò   — | \  }}t        |t        j                  «      r0|j                  r$t	        j
                  |j                  «       |«      S t        |«      rt        d„ t        ||«      D «       «      S |S )Nc              3   ór   K  — | ]/  \  }}|�$t        j                  |j                  «       |«      n|–— Œ1 y ­wr   )ÚfwADÚ	make_dualr5   )r‡   ÚpriÚtangs      r   rŠ   zDcheck_forward_ad_formula.<locals>.maybe_make_dual.<locals>.<genexpr>  s<   è ø€ ò DÙ!*  dð DHÐCSœTŸ^™^¨C¯J©J«L¸$Ô?ÐY\Ó\ñ Dùs   ‚57)
r%   ro   r   rj   r  r  r5   rÄ   r�   r¬   )ÚdualÚprimalÚtangents      r   Úmaybe_make_dualz1check_forward_ad_formula.<locals>.maybe_make_dual  sl   € ð #‰OˆF�GÜ˜&¤%§,¡,Ô/°F×4HÒ4HÜ—~‘~ f§m¡m£o°wÓ?Ð?Ü˜vÔ&Üñ DÜ.1°&¸'Ó.BôDó Dð DàˆMr   c           
      óÖ   •— t        t        ‰	t        | |«      «      «      }|j                  «       D ��ci c]  \  }}| ‰	|||   f«      “Œ }}}‰€ ‰
|i |¤ŽS  ‰‰
g|¢­i |¤ŽS c c}}w r   )r�   r  r¬   r'   )r|   Útangent_argsr}   Útangent_kwargsÚop_argsÚkÚvÚ	op_kwargsr  r"  rê   s           €€€r   Úcompute_expected_gradz7check_forward_ad_formula.<locals>.compute_expected_grad!  s€   ø€ ÜœC ´°T¸<Ó1HÓIÓJˆGØPV×P\ÑP\ÓP^×_ÉÈÈ1˜™O¨Q°¸qÑ0AÐ,BÓCÑCÐ_ˆIÑ_à Ð(Ù˜7Ð0 iÑ0Ð0Ù$ RÐ?¨'Ò?°YÑ?Ð?ùó	 `s   ´A%c                 ó   — | j                   S r   ©r   r   s    r   r   z*check_forward_ad_formula.<locals>.<lambda>+  s
   € ¨a¯h©h€ r   c                 ó   — | j                   S r   ©r!  r   s    r   r   z*check_forward_ad_formula.<locals>.<lambda>,  s
   € ¨q¯y©y€ r   rå   ræ   z
- wrapped_tangent_args: z
- wrapped_tangent_kwargs: rç   c                 ó8   •— t        | ‰«      r| j                  S | S r   r�   ré   s    €r   rž   z(check_forward_ad_formula.<locals>.unwrapI  s   ø€ Ü%/°°3Ô%7˜1Ÿ6™6Ð>¸QÐ>r   c                 ó(   •—  ‰| j                   «      S r   r,  ©r   rž   s    €r   r   z*check_forward_ad_formula.<locals>.<lambda>M  s   ø€ ±F¸1¿8¹8Ó4D€ r   c                 ó(   •—  ‰| j                   «      S r   r.  r1  s    €r   r   z*check_forward_ad_formula.<locals>.<lambda>N  s   ø€ ±V¸A¿I¹IÓ5F€ r   Tr  )r¸   r�   r   r   r  Ú
dual_levelr   Úunpack_dualrß   r  r¬   r'   r   rã   )%rê   r|   r}   r  rë   rË   r$  r×   rØ   Úflat_tangent_kwargsr%  r*  rì   Úexpected_primalsÚexpected_tangentsrÚ   rÜ   rÝ   rÓ   rÞ   Útang_choiceÚnew_tang_argsÚnew_tang_kwargsÚwhich_tang_args_are_wrappedÚwhich_tang_kwargs_are_wrappedr&  r'  r(  r)  rí   rá   Úactual_primalsÚactual_tangentsr(   r"  r  rž   s%   `  `                             @@@@r   Úcheck_forward_ad_formular?    sT  ý€ Ü)ÀEÔJ�M€Cˆôô Ó<°tÔ<Ó<€LÜ$ VÓ,Ñ€K�ÜÓJ¸kÔJÓJÐÜ#Ð$7¸Ó>€Nä	�‰Ó	ñ ;Tò		ö	@ñ )¨¨|¸VÀ^ÓTˆÜœD×,Ñ,¨hÓ7ˆÜ#Ñ$6¸ÓAÐÜ$Ñ%8¸(ÓCÐô <¸DÀ&È#ÈxÓXò !	TˆFØU[ÑRˆH�jÐ"8Ð:Rô  EÀ\ÐSaÐcfÐhpÓqò T�àQ\ñO�˜Ø/Ð1Nä¤ O´S¸À=Ó5QÓ RÓS�ØU_×UeÑUeÓUg×hÉTÈQÐPQ˜Q¡°°OÀAÑ4FÐ0GÓ HÑHÐh�	ÑhðØ(Ð0Ù!# WÐ!:°	Ñ!:™á!2°2Ð!M¸Ò!MÀ9Ñ!M˜ô?ô "¤$×"2Ñ"2°FÓ;�Ü!)Ó*DÀfÓ!M�Ü"*Ó+FÈÓ"O�Ù Ð0@ÈDÕQÙ Ð1BÈdÖSñ;Tñ	!	T÷5;Tð ;TùóF iøô $ò Ü4ØØ*Ð+AÐ*Bð C-Ø-EÐ,Fð G3Ø3NÐ2Oð P5Ø5RÐ4SÐSUðW÷ñ ûðú÷W;Tð ;TúsJ   Á1B,G&ÄF1Ä5G&Ä9F7ÅAG&Æ1G&Æ7	G#	Ç G	ÇG&ÇG#	Ç#G&Ç&G/)T)Ú )NN)NNN)*ro   r   rÍ   Útorch.utils._python_dispatchr   Útorch.utils._pytreer   r   r   Útorch.utilsr   r‹   Ú	functoolsr	   Útorch.utils._mode_utilsr
   r   Útorch.autograd.forward_adr   Ú
forward_adr  Útypingr   ra   r   r*   rS   r]   rd   r¸   rÄ   rÉ   r¡   rÕ   rß   rã   rî   rò   rø   r  r  r?  rl   r   r   ú<module>rI     s®   ðó Ý Û å :ß FÑ FÝ )Ý ß >ß (Ð (Ý Û 	ò	2òQò$òP
òóXDòtò*òEò&	-ò	Uóò,<òZ8ò,
óLð: 37ØCGñ3R˜xó 3RñxMT ô MTr   