Ë
    ÃÓ^j0&  ã                  ó<  — U d Z ddlmZ ddlmZ ddlZddlmZm	Z
 ddlmZmZmZmZmZmZmZ ddlmZmZ erddlZdd„Z	 	 	 	 	 	 	 	 	 	 dd	„Zdd
„Zdd„Zda de!d<   da"de!d<   da#de!d<   d d„Z$ddœ	 	 	 	 	 	 	 d!d„Zddœ	 	 	 	 	 d"d„Zdd„Zdd„Zd#d„Zdd„Zd$d„Z	y)%z‹
This module contains pre-dispatch wrappers for functorch operations
that enable proper tracing in PT2 non-strict export/compile fx graph.
é    )Úannotations)ÚTYPE_CHECKINGN)Ú_enter_dual_levelÚ_exit_dual_level)Ú_add_batch_dimÚ_jvp_decrement_nestingÚ_jvp_increment_nestingÚ_remove_batch_dimÚ_unwrap_for_gradÚ_vmap_decrement_nestingÚ_vmap_increment_nesting)Ú
_make_dualÚ_unpack_dualc                óº   — ddl m}  |«       }|dk  r| j                  |z   n|}|r(t        j                  j                  t        | f| ||«      S t        | ||«      }|S )zn
    Thin wrapper around torch._C._add_batch_dim that is used to proxy in
    PT2 export/compile fx graph
    r   ©Ú+_maybe_find_pre_dispatch_tf_mode_for_export)Útorch._export.utilsr   ÚndimÚtorchÚ	overridesÚhandle_torch_functionr   Ú_add_batch_dim_impl)ÚselfÚ	batch_dimÚlevelr   ÚmodeÚress         úg/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torch/_functorch/predispatch.pyr   r   (   sb   € õ
 Pá6Ó8€DØ)2°Qª�—	‘	˜IÒ%¸I€IáÜ�‰×4Ñ4Ü˜T˜G T¨9°eó
ð 	
ô ˜d I¨uÓ
5€CØ€Jó    c                ó’   — ddl m}  |«       }|r)t        j                  j	                  t
        | f| |||«      S t        | |||«      }|S )zq
    Thin wrapper around torch._C._remove_batch_dim that is used to proxy in
    PT2 export/compile fx graph
    r   r   )r   r   r   r   r   r
   Ú_remove_batch_dim_impl)r   r   Ú
batch_sizeÚout_dimr   r   r   s          r   r
   r
   ;   sP   € õ Pá6Ó8€DáÜ�‰×4Ñ4Ü ˜w¨¨e°ZÀó
ð 	
ô !  u¨j¸'Ó
B€CØ€Jr   c                óŠ   — ddl m}  |«       }|r't        j                  j	                  t
        | f| |«      S t        | |«      }|S )úp
    Thin wrapper around torch._C._vmap_increment_nesting that is used
    to proxy in export/compile graph
    r   r   )r   r   r   r   r   r   Ú_vmap_increment_nesting_impl)r"   Ú
randomnessr   r   r   s        r   r   r   O   sH   € õ
 Pá6Ó8€DáÜ�‰×4Ñ4Ü# j ]°JÀ
ó
ð 	
ô ' z°:Ó
>€CØ€Jr   c                 ó|   — ddl m}   | «       }|r$t        j                  j	                  t
        d«      S t        «       S )r%   r   r   © )r   r   r   r   r   r   Ú_vmap_decrement_nesting_impl©r   r   s     r   r   r   `   s;   € õ
 Pá6Ó8€DáÜ�‰×4Ñ4Ü#Øó
ð 	
ô (Ó)Ð)r   FÚboolÚDECOMPOSITIONS_LOADEDzthreading.Lock | NoneÚDECOMPOSITIONS_LOCKztorch.library.Library | NoneÚVMAP_DECOMPOSITIONS_LIBc                 ó  ‡— ddl m}   | «       }|r$t        j                  j	                  t
        d«      S t        ryt        €ddl} |j                  «       at        5  t        r
	 ddd«       yddl
}|j                  j                  dd«      dk(  rnda	 ddd«       yt        j                  j                  dd	d
«      addlmŠ dˆfd„} |t        j$                  j&                  j(                  j*                  «        |t        j$                  j&                  j,                  j*                  «        |t        j$                  j&                  j.                  j*                  «        |t        j$                  j&                  j0                  j*                  «        |t        j$                  j&                  j2                  j*                  «        |t        j$                  j&                  j4                  j*                  «        |t        j$                  j&                  j6                  j*                  «        |t        j$                  j&                  j8                  j*                  «       daddd«       y# 1 sw Y   yxY w)zH
    Lazy loading of vmap decompositions with pre-dispatch support.
    r   r   r)   NÚPYTORCH_JITÚ1TÚatenÚIMPLÚFuncTorchBatched)Údecomposition_tablec                ó~   •— t         €t        d«      ‚| ‰v rt         j                  | ‰|    «       y t        d| › �«      ‚)Nz(VMAP_DECOMPOSITIONS_LIB must not be Nonez!could not find decomposition for )r/   ÚAssertionErrorÚimplÚRuntimeError)Údecompr6   s    €r   Ú#_register_python_decomposition_vmapzElazy_load_decompositions.<locals>._register_python_decomposition_vmap¡   sG   ø€ Ü&Ð.Ü$Ð%OÓPÐPØÐ,Ñ,Ü'×,Ñ,¨VÐ5HÈÑ5PÕQä"Ð%FÀvÀhÐ#OÓPÐPr   )r;   ztorch._ops.OpOverloadÚreturnÚNone)r   r   r   r   r   Úlazy_load_decompositionsr-   r.   Ú	threadingÚLockÚosÚenvironÚgetÚlibraryÚLibraryr/   Útorch._decompr6   Úopsr3   Ú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   r   r@   rB   r<   r6   s        @r   r?   r?   w   s¿  ø€ õ Pá6Ó8€DáÜ�‰×4Ñ4Ô5MÈrÓRÐRõ Øô Ð"Ûà,˜iŸn™nÓ.Ðä	ñ '%Ý Ø÷'%ð '%ó 	à—
‘
—‘˜}¨cÓ2°cÒ9¸iØ$(Ð!Ø÷'%ð '%ô #(§-¡-×"7Ñ"7Ø�FÐ.ó#
Ðõ 	6õ	Qñ 	,¬E¯I©I¯N©N×,LÑ,L×,TÑ,TÔUÙ+Ü�I‰I�N‰N×2Ñ2×:Ñ:ô	
ñ 	,¬E¯I©I¯N©N×,NÑ,N×,VÑ,VÔWÙ+¬E¯I©I¯N©N×,KÑ,K×,SÑ,SÔTÙ+¬E¯I©I¯N©N×,MÑ,M×,UÑ,UÔVÙ+¬E¯I©I¯N©N×,LÑ,L×,TÑ,TÔUÙ+¬E¯I©I¯N©N×,NÑ,N×,VÑ,VÔWÙ+¬E¯I©I¯N©N×,?Ñ,?×,GÑ,GÔHà $Ð÷O'%÷ '%ñ '%ús   ÁI6Á.'I6ÂGI6É6I?©r   c               ó�   — ddl m}  |«       }|r*t        j                  j	                  t
        | |f| ||¬«      S t        | ||¬«      S )z€
    Thin wrapper around torch._VF._make_dual that is used to proxy in
    PT2 export/compile fx graph for forward-mode AD.
    r   r   rR   )r   r   r   r   r   r   Ú_make_dual_impl)ÚtensorÚtangentr   r   r   s        r   r   r   ·   sP   € õ Pá6Ó8€DáÜ�‰×4Ñ4Ü˜ Ð)¨6°7À%ð 5ó 
ð 	
ô ˜6 7°%Ô8Ð8r   c               óŠ   — ddl m}  |«       }|r(t        j                  j	                  t
        | f| |¬«      S t        | |¬«      S )z‚
    Thin wrapper around torch._VF._unpack_dual that is used to proxy in
    PT2 export/compile fx graph for forward-mode AD.
    r   r   rR   )r   r   r   r   r   r   Ú_unpack_dual_impl©rU   r   r   r   s       r   r   r   Ê   sI   € õ Pá6Ó8€DáÜ�‰×4Ñ4Ü˜6˜) V°5ð 5ó 
ð 	
ô ˜V¨5Ô1Ð1r   c                 ó|   — ddl m}   | «       }|r$t        j                  j	                  t
        d«      S t        «       S )z�
    Thin wrapper around torch._C._functorch._jvp_increment_nesting that is
    used to proxy in export/compile graph for forward-mode AD.
    r   r   r)   )r   r   r   r   r   r	   Ú_jvp_increment_nesting_implr+   s     r   r	   r	   Ý   ó;   € õ
 Pá6Ó8€DáÜ�‰×4Ñ4Ü"Øó
ð 	
ô 'Ó(Ð(r   c                 ó|   — ddl m}   | «       }|r$t        j                  j	                  t
        d«      S t        «       S )z�
    Thin wrapper around torch._C._functorch._jvp_decrement_nesting that is
    used to proxy in export/compile graph for forward-mode AD.
    r   r   r)   )r   r   r   r   r   r   Ú_jvp_decrement_nesting_implr+   s     r   r   r   î   r\   r   c                ó†   — ddl m}  |«       }|r't        j                  j	                  t
        | f| |«      S t        | |«      S )z¦
    Thin wrapper around torch._C._functorch._unwrap_for_grad that is used
    to proxy in PT2 export/compile fx graph for functorch transforms (grad, vjp, jvp).
    r   r   )r   r   r   r   r   r   Ú_unwrap_for_grad_implrY   s       r   r   r   ÿ   sD   € õ
 Pá6Ó8€DáÜ�‰×4Ñ4Ü˜v˜i¨°ó
ð 	
ô ! ¨Ó/Ð/r   c                 ó|   — ddl m}   | «       }|r$t        j                  j	                  t
        d«      S t        «       S )z†
    Thin wrapper around torch._C._enter_dual_level that is used to proxy in
    PT2 export/compile fx graph for forward-mode AD.
    r   r   r)   )r   r   r   r   r   r   Ú_enter_dual_level_implr+   s     r   r   r     s4   € õ
 Pá6Ó8€DáÜ�‰×4Ñ4Ô5FÈÓKÐKÜ!Ó#Ð#r   c                ó„   — ddl m}  |«       }|r&t        j                  j	                  t
        d| ¬«      S t        | ¬«      S )z…
    Thin wrapper around torch._C._exit_dual_level that is used to proxy in
    PT2 export/compile fx graph for forward-mode AD.
    r   r   r)   rR   )r   r   r   r   r   r   Ú_exit_dual_level_impl)r   r   r   s      r   r   r     s<   € õ
 Pá6Ó8€DáÜ�‰×4Ñ4Ô5EÀrÐQVÐ4ÓWÐWÜ  uÔ-Ð-r   )r   útorch.Tensorr   Úintr   rf   r=   re   )
r   re   r   rf   r"   rf   r#   rf   r=   re   )r"   rf   r'   Ústrr=   rf   )r=   rf   )r=   r>   )rU   re   rV   re   r   rf   r=   re   )rU   re   r   rf   r=   z!tuple[torch.Tensor, torch.Tensor])rU   re   r   rf   r=   re   )r   rf   r=   r>   )%Ú__doc__Ú
__future__r   Útypingr   r   Útorch._Cr   rb   r   rd   Útorch._C._functorchr   r   r   r^   r	   r[   r
   r!   r   r`   r   r*   r   r&   Ú	torch._VFr   rT   r   rX   r@   r-   Ú__annotations__r.   r/   r?   r)   r   r   ú<module>ro      s  ðòõ
 #å  ã ÷÷÷ ñ ÷ñ Ûóð&Ø
ðØ"ðØ03ðØ>Aðàóó(ó"*ð$ $Ð �tÓ #Ø-1Ð Ð*Ó 1Ø8<Ð Ð5Ó <ó=%ðB BCñ9Øð9Ø#/ð9Ø;>ð9àó9ð( +,ñ2Øð2Ø$'ð2à&ó2ó&)ó")ó"0ó"$ô.r   