Ë
    Z^(h³$  ã                  óh  — d dl mZ d dlZd dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZmZmZmZmZmZmZmZmZmZ d d	lmZ erd d
lm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„Z$d#d„Z%d$d„Z&d%d„Z'd$d„Z( ed¬«       G d„ d«      «       Z)d&d„Z*y)'é    )ÚannotationsN)Ú	dataclass)ÚTYPE_CHECKING)Ú	translate)ÚDispatcherSignature)Úmethod_with_native_function)
ÚArgumentÚBaseTyÚBaseTypeÚFunctionSchemaÚListTypeÚNativeFunctionÚOptionalTypeÚReturnÚ
SchemaKindÚType)ÚmapMaybe)ÚSequencec                ó`   — t        | t        «      xr | j                  t        j                  k(  S ©N)Ú
isinstancer   Únamer
   ÚTensor©Útyps    úX/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torchgen/gen_vmap_plumbing.pyÚ	is_tensorr      s!   € Ü�cœ8Ó$ÒB¨¯©´V·]±]Ñ)BÐBó    c                óP   — t        | t        «      xr t        | j                  «      S r   )r   r   r   Úelemr   s    r   Úis_optional_tensorr!   !   s   € Ü�cœ<Ó(Ò@¬Y°s·x±xÓ-@Ð@r   c                óP   — t        | t        «      xr t        | j                  «      S r   )r   r   r   r    r   s    r   Úis_tensor_listr#   %   s   € Ü�cœ8Ó$Ò<¬°3·8±8Ó)<Ð<r   c           	     óh   — d| › d| › d| › d|› d�	}t        j                  |«      j                  d«      S )Nz
    auto [ú_value, z_bdim] = unwrapTensorAtLevel(ú, ú);ú
©ÚtextwrapÚdedentÚsplit©r   Úcur_level_varÚresults      r   Úunwrap_tensorr0   )   sD   € ðØˆ&�˜˜Ð;¸D¸6ÀÀMÀ?ÐRTðX€Fä�?‰?˜6Ó"×(Ñ(¨Ó.Ð.r   c                óz   — d| › d| › d| › d| › d| › d| › d|› d�}t        j                  |«      j                  d	«      S )
Nz    std::optional<Tensor> z#_value;
    std::optional<int64_t> z_bdim;
    if (z) {
        std::tie(r%   z_bdim) = unwrapTensorAtLevel(z
.value(), z);
    }r(   r)   r-   s      r   Úunwrap_optional_tensorr2   /   sh   € ðØ˜&ð !Ø ˜6ð "	Ø	ˆð Ø��x ˜vÐ%BÀ4À&È
ÐS`ÐRað bð	
€Fô �?‰?˜6Ó"×(Ñ(¨Ó.Ð.r   c                ó   — | D �cg c]  }|j                   ‘Œ }}| D �cg c]  }|j                  ‘Œ }}t        ||«      D ��cg c]  \  }}t        |«      sŒ|‘Œ }}}t        ||«      D ��cg c]  \  }}t	        |«      sŒ|‘Œ }}}g }	|D ]  }
|	t        |
|«      z  }	Œ |D ]  }|	t        ||«      z  }	Œ dj                  |	«      }g }|D ])  }||v s||v r||› d�|› d�gz  }Œ|j                  |«       Œ+ ||fS c c}w c c}w c c}}w c c}}w )Nr(   Ú_valueÚ_bdim)	r   ÚtypeÚzipr   r!   r0   r2   ÚjoinÚappend)Úflat_argumentsr.   ÚaÚ	arg_namesÚ	arg_typesr   r   ÚtensorsÚoptional_tensorsÚunwrapsÚtensorÚ
opt_tensorÚunwrap_codeÚunwrapped_arg_listÚargs                  r   Úgen_unwrapsrF   9   sJ  € ð "0Ö0˜A�—“Ð0€IÐ0Ø!/Ö0˜A�—“Ð0€IÐ0ä%(¨°IÓ%>×Q™	˜˜TÄ)ÈCÅ.ŠtÐQ€GÑQä! )¨YÓ7÷Ù��dÔ;MÈcÕ;RŠðÐñ ð €GØò 8ˆØ”= ¨Ó7Ñ7‰ð8ð 'ò Eˆ
ØÔ)¨*°mÓDÑD‰ðEà—)‘)˜GÓ$€KàÐØò +ˆØ�'‰>˜SÐ$4Ñ4Ø c U¨& >°c°U¸%°=Ð"AÑAÑà×%Ñ% cÕ*ð	+ð
 Ð*Ð*Ð*ùò- 1ùÚ0ùãQùós"   …C:žC?ÁDÁDÁ,D
Â D
c                óÚ  — g }|j                   j                  }|D ]?  }|j                  j                  «       sŒ|j	                  d|j
                  › d|› d�«       ŒA t        j                  |«      }dj                  d„ t        | j                  «       |j                  «       «      D «       «      }ddj                  |«      › d|j                  j
                  j                  «       › d|› d	�S )
Nz!isBatchedAtLevel(r&   ú)c              3  ó4   K  — | ]  }|j                   –— Œ y ­wr   )Úexpr)Ú.0Úes     r   ú	<genexpr>z4gen_case_where_all_bdims_are_none.<locals>.<genexpr>`   s   è ø€ ò  Øˆ��ñ ùs   ‚zif (z && z) {
  return at::_ops::z::call(ú);
})Ú	argumentsÚflat_allr6   Úis_tensor_liker9   r   r   Úfrom_schemar8   r   ÚfuncÚunambiguous_name)Ú	outer_sigÚschemar.   Ú
conditionsÚ	flat_argsrE   ÚsigÚtranslated_argss           r   Ú!gen_case_where_all_bdims_are_noner[   U   sê   € ð €JØ× Ñ ×)Ñ)€IØò MˆØ�x‰x×&Ñ&Ô(ØØ×ÑÐ.¨s¯x©x¨j¸¸=¸/ÈÐKÕLðMô
 ×
)Ñ
)¨&Ó
1€CØ—i‘iñ  Ü! )×"5Ñ"5Ó"7¸¿¹»ÓIô ó €OðØ‡[�[�ÓÐð Ø—H‘H—M‘M×2Ñ2Ó4Ð5°W¸_Ð<Mð Nðð r   c                ó®  — d}g }| D ]�  }t        |j                  «      r*|j                  d|› d|› d|dz   › d|› d|› d�«       |dz  }ŒBt        |j                  «      r*|j                  d	|› d|› d|dz   › d|› d|› d�«       |dz  }Œ�|j                  d
|› d|› d�«       |dz  }ŒŸ t	        |«      dk(  rd|d   › d�}|S ddj                  |«      › d�}|S )Nr   zmakeBatched(std::get<z>(z), std::get<é   z), rH   é   zmakeBatchedVector(std::get<z	std::get<zreturn ú;zreturn std::make_tuple(r&   r'   )r   r6   r9   r#   Úlenr8   )Úreturnsr.   Úresults_varÚidxÚwrapped_returnsÚretr/   s          r   Úgen_returnsrf   i   s5  € ð €CØ€OØò ˆÜ�S—X‘XÔØ×"Ñ"Ø'¨ u¨B¨{¨m¸<ÈÈaÉÀyÐPRÐS^ÐR_Ð_bÐcpÐbqÐqrÐsôð �1‰H‰CÜ˜CŸH™HÔ%Ø×"Ñ"Ø-¨c¨U°"°[°MÀÈcÐTUÉgÈYÐVXÐYdÐXeÐehÐivÐhwÐwxÐyôð �1‰H‰Cà×"Ñ" Y¨s¨e°2°k°]À!Ð#DÔEØ�1‰H‰Cðô ˆ?Ó˜qÒ Ø˜?¨1Ñ-Ð.¨aÐ0ˆð €Mð +¨4¯9©9°_Ó+EÐ*FÀbÐIˆØ€Mr   c                óN   — t        d„ | j                  j                  D «       «      S )Nc              3  óP   K  — | ]  }|j                   j                  «       –— Œ  y ­wr   ©r6   rQ   )rK   r;   s     r   rM   z4accepts_at_least_one_tensor_input.<locals>.<genexpr>„   s   è ø€ ÒJ¨1ˆq�v‰v×$Ñ$×&ÑJùó   ‚$&)ÚanyrO   rP   )rV   s    r   Ú!accepts_at_least_one_tensor_inputrl   ƒ   s   € ÜÑJ°×0@Ñ0@×0IÑ0IÔJÓJÐJr   c                óN   — | j                   d uxr | j                   j                  S r   )Ú
annotationÚis_write)Úarguments    r   Úis_mutated_argrq   ‡   s$   € Ø×Ñ dÐ*ÒK¨x×/BÑ/B×/KÑ/KÐKr   c                ó\  — | j                   }t        j                  |«      }|j                  }|j	                  «       t
        j                  k(  sJ ‚t        |j                  j                  d   «      sy t        |j                  j                  D �cg c]  }t        |«      sŒ|‘Œ c}«      dk(  sy t        |«      dk(  ry t        d„ |D «       «      sy t        |«      sy d}t        |j                  j                  |«      \  }}t        |||«      }d|j                  |j                   j#                  «       dz   ¬«      › d|› d	t%        j&                  |d
«      › dt%        j&                  |d
«      › ddj)                  |«      › d|j                  j                  d   j                   › d�S c c}w )Nr   r]   c              3  ót   K  — | ]0  }t        |j                  «      xs t        |j                  «      –— Œ2 y ­wr   )r   r6   r#   ©rK   re   s     r   rM   z,gen_vmap_inplace_plumbing.<locals>.<genexpr>Ÿ   s*   è ø€ ÒRÀ3Œy˜Ÿ™Ó"Ò>¤n°S·X±XÓ&>Ó>ÑRùs   ‚68Ú	cur_levelú:template <typename batch_rule_t, batch_rule_t batch_rule>
Ú_generated_plumbing©r   zÉ {
  c10::impl::ExcludeDispatchKeyGuard guard(DispatchKey::FuncTorchBatched);
  auto maybe_layer = maybeCurrentDynamicLayer();
  vmap_check_escaped(maybe_layer, "gen_vmap_inplace_plumbing");
  int64_t ú = maybe_layer->layerId();
ú  r(   ú
  batch_rule(r&   z);
  return z;
})rS   r   rR   ra   Úkindr   Úinplacerq   rO   rP   r`   Úallrl   rF   r[   Údeclr   rT   r*   Úindentr8   )	Únative_functionrV   rY   ra   rE   r.   r@   rD   Úbdims_all_none_cases	            r   Úgen_vmap_inplace_plumbingrƒ   ‹   s�  € ð
 ×!Ñ!€FÜ
×
)Ñ
)¨&Ó
1€CØ�n‰n€Gð �;‰;‹=œJ×.Ñ.Ò.Ð.Ð.Ü˜&×*Ñ*×3Ñ3°AÑ6Ô7ØÜ˜v×/Ñ/×8Ñ8ÖP˜¼NÈ3Õ<O’ÒPÓQÐUVÒVØô ˆ7ƒ|�qÒØÜÑRÈ'ÔRÔRØÜ,¨VÔ4Øà€Mä"-¨f×.>Ñ.>×.GÑ.GÈÓ"WÑ€GÐÜ;¸CÀÈÓWÐðà‡�ˆv�{‰{×+Ñ+Ó-Ð0EÑE€ÓFÐ Gð Hð ˆ/ð Ü	‡�Ð$ dÓ+Ð ,ð -Ü	‡��˜$ÓÐ  ð !Ø�i‰iÐ*Ó+Ð,ð -
Ø
×
Ñ
×
#Ñ
# AÑ
&×
+Ñ
+Ð	,ð -ðð ùò! Qs   ÂF)Â"F)c                ó�  — | j                   }t        j                  |«      }d}t        |j                  j
                  |«      \  }}t        |||«      }d|j                  |j                  j                  «       dz   ¬«      › d|› dt        j                  |d«      › dt        j                  |d«      › d	d
j                  |«      › d�S )Nru   rv   rw   rx   zÌ {
  c10::impl::ExcludeDispatchKeyGuard guard(DispatchKey::FuncTorchBatched);
  auto maybe_layer = maybeCurrentDynamicLayer();
  vmap_check_escaped(maybe_layer, "gen_vmap_plumbing_no_returns");
  int64_t ry   rz   r(   r{   r&   rN   )rS   r   rR   rF   rO   rP   r[   r   r   rT   r*   r€   r8   )r�   rV   rY   r.   r@   rD   r‚   s          r   Úgen_vmap_plumbing_no_returnsr…   ·   sÖ   € Ø×!Ñ!€FÜ
×
)Ñ
)¨&Ó
1€CØ€Mä"-¨f×.>Ñ.>×.GÑ.GÈÓ"WÑ€GÐÜ;¸CÀÈÓWÐðà‡�ˆv�{‰{×+Ñ+Ó-Ð0EÑE€ÓFÐ Gð Hð ˆ/ð Ü	‡�Ð$ dÓ+Ð ,ð -Ü	‡��˜$ÓÐ  ð !Ø�i‰iÐ*Ó+Ð,ð -ð
ð 
r   c                ó<  — | j                   }t        j                  |«      }|j                  }t	        |«      sy t        |«      dk(  rt        | «      S ddg}t        d„ |D «       «      s|j                  j                  «       |vry d| j                  v ry |j                  «       t        j                  k(  rt        | «      S |j                  «       t        j                  k7  ry d}d}t!        |j"                  j$                  |«      \  }}t'        |||«      }	t)        |||«      }
d|j+                  |j                  j                  «       d	z   ¬
«      › d|› dt-        j.                  |	d«      › dt-        j.                  |d«      › d|› ddj1                  |«      › d|
› d�S )Nr   Ú#_scaled_dot_product_flash_attentionÚ#_scaled_dot_product_cudnn_attentionc              3  óP   K  — | ]  }|j                   j                  «       –— Œ  y ­wr   ri   rt   s     r   rM   z$gen_vmap_plumbing.<locals>.<genexpr>Û   s   è ø€ Ò=¨c�—‘×'Ñ'×)Ñ=ùrj   Úinplace_viewÚresultsru   rv   rw   rx   zÁ {
  c10::impl::ExcludeDispatchKeyGuard guard(DispatchKey::FuncTorchBatched);
  auto maybe_layer = maybeCurrentDynamicLayer();
  vmap_check_escaped(maybe_layer, "gen_vmap_plumbing");
  int64_t ry   rz   r(   z
  auto z = batch_rule(r&   z);
  z
})rS   r   rR   ra   rl   r`   r…   r~   r   rT   Útagsr|   r   r}   rƒ   Ú
functionalrF   rO   rP   r[   rf   r   r*   r€   r8   )r�   rV   rY   ra   Úreturn_symint_overridesrb   r.   r@   rD   r‚   rd   s              r   Úgen_vmap_plumbingr�   Ì   s¨  € Ø×!Ñ!€FÜ
×
)Ñ
)¨&Ó
1€CØ�n‰n€Gô -¨VÔ4ØÜ
ˆ7ƒ|�qÒÜ+¨OÓ<Ð<à-Ø-ðÐô
 Ñ=°WÔ=Ô=Ø�K‰K×(Ñ(Ó*Ð2IÑIàà˜×-Ñ-Ñ-Øà‡{�{ƒ}œ
×*Ñ*Ò*Ü(¨Ó9Ð9ð ‡{�{ƒ}œ
×-Ñ-Ò-Øà€KØ€Mä"-¨f×.>Ñ.>×.GÑ.GÈÓ"WÑ€GÐÜ;¸CÀÈÓWÐä! '¨=¸+ÓF€Oðà‡�ˆv�{‰{×+Ñ+Ó-Ð0EÑE€ÓFÐ Gð Hð ˆ/ð Ü	‡�Ð$ dÓ+Ð ,ð -Ü	‡��˜$ÓÐ  ð !Ø€}�N 4§9¡9Ð-?Ó#@Ð"Að BØÐð ðð r   T)Úfrozenc                  ó   — e Zd Zedd„«       Zy)ÚComputeBatchRulePlumbingc                ó   — t        |«      }|S r   )r�   )ÚselfÚfr/   s      r   Ú__call__z!ComputeBatchRulePlumbing.__call__  s   € ä" 1Ó%ˆØˆr   N)r•   r   Úreturnú
str | None)Ú__name__Ú
__module__Ú__qualname__r   r–   © r   r   r’   r’   ÿ   s   „ à òó !ñr   r’   c                óf   — dj                  t        t        t        «       | «      «      «      }d|› d�S )Nr(   z|
#pragma once
#include <ATen/Operators.h>
#include <ATen/functorch/PlumbingHelper.h>

namespace at { namespace functorch {

z 

}} // namespace at::functorch
)r8   Úlistr   r’   )Únative_functionsÚbodys     r   Úgen_all_vmap_plumbingr¡     s<   € Ø�9‰9”Tœ(Ô#;Ó#=Ð?OÓPÓQÓR€Dðð €ð ð
ð 
r   )r   r   r—   Úbool)r   Ústrr.   r£   r—   z	list[str])r:   zSequence[Argument]r.   r£   r—   ztuple[str, list[str]])rU   r   rV   r   r.   r£   r—   r£   )ra   ztuple[Return, ...]r.   r£   rb   r£   r—   r£   )rV   r   r—   r¢   )rp   r	   r—   r¢   )r�   r   r—   r˜   )r�   r   r—   r£   )rŸ   zSequence[NativeFunction]r—   r£   )+Ú
__future__r   r*   Údataclassesr   Útypingr   Útorchgen.api.translater   Útorchgen.api.typesr   Útorchgen.contextr   Útorchgen.modelr	   r
   r   r   r   r   r   r   r   r   Útorchgen.utilsr   Úcollections.abcr   r   r!   r#   r0   r2   rF   r[   rf   rl   rq   rƒ   r…   r�   r’   r¡   rœ   r   r   ú<module>r­      sø   ðÝ "ã Ý !Ý  å ,Ý 2Ý 8÷÷ ÷ õ $ñ Ý(óCóAó=ó/ó/ð+Ø&ð+Ø7:ð+àó+ð8Ø"ðØ,:ðØKNðàóð(ØðØ03ðØBEðàóó4KóLó)óXó*0ñf �$Ô÷ð ó ðôr   