§
    ŠŠtj0&  ã                  ó  — 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œd0d$„Zd-d%„Zd-d&„Zd1d'„Zd-d(„Zd2d)„Z	dS )3z‹
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_dualÚselfútorch.TensorÚ	batch_dimÚintÚlevelÚreturnc                óÂ   — ddl m}  |¦   «         }|dk     r
| j        |z   n|}|r)t          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)r   r   r   r   ÚmodeÚress         úZ/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/_functorch/predispatch.pyr   r   (   s…   € ð
 PÐOÐOÐOÐOÐOà6Ð6Ñ8Ô8€DØ)2°Qª¨�”	˜IÑ%Ð%¸I€Iàð 
ÝŒ×4Ò4Ý˜T˜G T¨9°eñ
ô 
ð 	
õ ˜d I¨uÑ
5Ô
5€CØ€Jó    Ú
batch_sizeÚout_dimc                ó¢   — ddl m}  |¦   «         }|r*t          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   r#   r$   r   r   r    s          r!   r
   r
   ;   sp   € ð PÐOÐOÐOÐOÐOà6Ð6Ñ8Ô8€Dàð 
ÝŒ×4Ò4Ý ˜w¨¨e°ZÀñ
ô 
ð 	
õ !  u¨j¸'Ñ
BÔ
B€CØ€Jr"   Ú
randomnessÚstrc                óš   — ddl m}  |¦   «         }|r(t          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#   r'   r   r   r    s        r!   r   r   O   sh   € ð
 PÐOÐOÐOÐOÐOà6Ð6Ñ8Ô8€Dàð 
ÝŒ×4Ò4Ý# j ]°JÀ
ñ
ô 
ð 	
õ ' z°:Ñ
>Ô
>€CØ€Jr"   c                 óŒ   — ddl m}   | ¦   «         }|r%t          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ÐOÐOÐOÐOÐOà6Ð6Ñ8Ô8€Dàð 
ÝŒ×4Ò4Ý#Øñ
ô 
ð 	
õ (Ñ)Ô)Ð)r"   FÚboolÚDECOMPOSITIONS_LOADEDzthreading.Lock | NoneÚDECOMPOSITIONS_LOCKztorch.library.Library | NoneÚVMAP_DECOMPOSITIONS_LIBÚNonec                 ó,  ‡— ddl m}   | ¦   «         }|r%t          j                             t
          d¦  «        S t          rdS t          €ddl} |j	        ¦   «         at          5  t          r	 ddd¦  «         dS ddl
}|j                             dd¦  «        dk    rnda	 ddd¦  «         dS t          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        j        j        ¦  «          |t          j        j        j        j        ¦  «          |t          j        j        j        j        ¦  «          |t          j        j        j        j        ¦  «          |t          j        j        j        j        ¦  «         daddd¦  «         dS # 1 swxY w Y   dS )zH
    Lazy loading of vmap decompositions with pre-dispatch support.
    r   r   r-   NÚPYTORCH_JITÚ1TÚatenÚIMPLÚFuncTorchBatched)Údecomposition_tableÚdecompútorch._ops.OpOverloadr   r4   c                ó¢   •— t           €t          d¦  «        ‚| ‰v r#t                                | ‰|          ¦  «         d S t          d| › �¦  «        ‚)Nz(VMAP_DECOMPOSITIONS_LIB must not be Nonez!could not find decomposition for )r3   ÚAssertionErrorÚimplÚRuntimeError)r<   r;   s    €r!   Ú#_register_python_decomposition_vmapzElazy_load_decompositions.<locals>._register_python_decomposition_vmap¡   s]   ø€ Ý&Ð.Ý$Ð%OÑPÔPÐPØÐ,Ð,Ð,Ý'×,Ò,¨VÐ5HÈÔ5PÑQÔQÐQÐQÐQå"Ð#OÀvÐ#OÐ#OÑPÔPÐPr"   )r<   r=   r   r4   )r   r   r   r   r   Úlazy_load_decompositionsr1   r2   Ú	threadingÚLockÚosÚenvironÚgetÚlibraryÚLibraryr3   Útorch._decompr;   Úopsr8   Ú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   rD   rF   rB   r;   s        @r!   rC   rC   w   s¶  ø€ ð PÐOÐOÐOÐOÐOà6Ð6Ñ8Ô8€Dàð SÝŒ×4Ò4Õ5MÈrÑRÔRÐRõ ð Øˆõ Ð"ØÐÐÐà,˜iœnÑ.Ô.Ðå	ð '%ð '%Ý ð 	Øð'%ð '%ð '%ñ '%ô '%ð '%ð '%ð '%ð 	ˆ	ˆ	ˆ	à”
—’˜}¨cÑ2Ô2°cÒ9Ð9Ð9Ø$(Ð!Øð'%ð '%ð '%ñ '%ô '%ð '%ð '%ð '%õ #(¤-×"7Ò"7Ø�FÐ.ñ#
ô #
Ðð 	6Ð5Ð5Ð5Ð5Ð5ð	Qð 	Qð 	Qð 	Qð 	Qð 	Qð 	,Ð+­E¬I¬NÔ,LÔ,TÑUÔUÐUØ+Ð+ÝŒIŒNÔ2Ô:ñ	
ô 	
ð 	
ð 	,Ð+­E¬I¬NÔ,NÔ,VÑWÔWÐWØ+Ð+­E¬I¬NÔ,KÔ,SÑTÔTÐTØ+Ð+­E¬I¬NÔ,MÔ,UÑVÔVÐVØ+Ð+­E¬I¬NÔ,LÔ,TÑUÔUÐUØ+Ð+­E¬I¬NÔ,NÔ,VÑWÔWÐWØ+Ð+­E¬I¬NÔ,?Ô,GÑHÔHÐHà $ÐðO'%ð '%ð '%ñ '%ô '%ð '%ð '%ð '%ð '%ð '%ð '%ð '%øøøð '%ð '%ð '%ð '%ð '%ð '%s   Á#	H	Á9'H	Â-EH	È	HÈH©r   ÚtensorÚtangentc               ó    — ddl m}  |¦   «         }|r+t          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   rV   )r   r   r   r   r   r   Ú_make_dual_impl)rW   rX   r   r   r   s        r!   r   r   ·   ss   € ð PÐOÐOÐOÐOÐOà6Ð6Ñ8Ô8€Dàð 
ÝŒ×4Ò4Ý˜ Ð)¨6°7À%ð 5ñ 
ô 
ð 	
õ ˜6 7°%Ð8Ñ8Ô8Ð8r"   ú!tuple[torch.Tensor, torch.Tensor]c               óš   — ddl m}  |¦   «         }|r)t          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   rV   )r   r   r   r   r   r   Ú_unpack_dual_impl©rW   r   r   r   s       r!   r   r   Ê   sl   € ð PÐOÐOÐOÐOÐOà6Ð6Ñ8Ô8€Dàð 
ÝŒ×4Ò4Ý˜6˜) V°5ð 5ñ 
ô 
ð 	
õ ˜V¨5Ð1Ñ1Ô1Ð1r"   c                 óŒ   — ddl m}   | ¦   «         }|r%t          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ÐOÐOÐOÐOÐOà6Ð6Ñ8Ô8€Dàð 
ÝŒ×4Ò4Ý"Øñ
ô 
ð 	
õ 'Ñ(Ô(Ð(r"   c                 óŒ   — ddl m}   | ¦   «         }|r%t          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   î   ra   r"   c                ó–   — ddl m}  |¦   «         }|r(t          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_implr^   s       r!   r   r   ÿ   sd   € ð
 PÐOÐOÐOÐOÐOà6Ð6Ñ8Ô8€Dàð 
ÝŒ×4Ò4Ý˜v˜i¨°ñ
ô 
ð 	
õ ! ¨Ñ/Ô/Ð/r"   c                 óŒ   — ddl m}   | ¦   «         }|r%t          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     sS   € ð
 PÐOÐOÐOÐOÐOà6Ð6Ñ8Ô8€Dàð LÝŒ×4Ò4Õ5FÈÑKÔKÐKÝ!Ñ#Ô#Ð#r"   c                ó”   — ddl m}  |¦   «         }|r't          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-   rV   )r   r   r   r   r   r   Ú_exit_dual_level_impl)r   r   r   s      r!   r   r     s^   € ð
 PÐOÐOÐOÐOÐOà6Ð6Ñ8Ô8€Dàð XÝŒ×4Ò4Õ5EÀrÐQVÐ4ÑWÔWÐWÝ  uÐ-Ñ-Ô-Ð-r"   )r   r   r   r   r   r   r   r   )
r   r   r   r   r#   r   r$   r   r   r   )r#   r   r'   r(   r   r   )r   r   )r   r4   )rW   r   rX   r   r   r   r   r   )rW   r   r   r   r   r[   )rW   r   r   r   r   r   )r   r   r   r4   )%Ú__doc__Ú
__future__r   Útypingr   r   Útorch._Cr   rg   r   ri   Útorch._C._functorchr   r   r   rc   r	   r`   r
   r&   r   re   r   r.   r   r+   Ú	torch._VFr   rZ   r   r]   rD   r1   Ú__annotations__r2   r3   rC   r-   r"   r!   ú<module>rq      sV  ððð ð ð
 #Ð "Ð "Ð "Ð "Ð "à  Ð  Ð  Ð  Ð  Ð  à €€€ðð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ØÐÐÐðð ð ð ð&ð ð ð ð(ð ð ð ð"*ð *ð *ð *ð$ $Ð Ð #Ð #Ð #Ñ #Ø-1Ð Ð 1Ð 1Ð 1Ñ 1Ø8<Ð Ð <Ð <Ð <Ñ <ð=%ð =%ð =%ð =%ðB BCð9ð 9ð 9ð 9ð 9ð 9ð( +,ð2ð 2ð 2ð 2ð 2ð 2ð&)ð )ð )ð )ð")ð )ð )ð )ð"0ð 0ð 0ð 0ð"$ð $ð $ð $ð.ð .ð .ð .ð .ð .r"   