o
    eiK                     @  s   U d Z ddlmZ ddlmZ ddlZddlmZm	Z
mZmZ er%ddlZd"ddZd#ddZ	d$ddZd%ddZdaded< daded< daded< d&d d!ZdS )'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)_add_batch_dim_remove_batch_dim_vmap_decrement_nesting_vmap_increment_nestingselftorch.Tensor	batch_dimintlevelreturnc                 C  sR   ddl m} | }|dk r| j| 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res r   f/var/www/addictedbytheproject.nl/epg/venv/lib/python3.10/site-packages/torch/_functorch/predispatch.pyr      s   r   
batch_sizeout_dimc                 C  s@   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   r   r   r   r   0   s   r   
randomnessstrc                 C  s8   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   r   r   r   r   D   s   

r   c                  C  s*   ddl m}  |  }|rtjtdS t S )r   r   r   r   )r   r   r   r   r   r   _vmap_decrement_nesting_impl)r   r   r   r   r   r   U   s   r   FboolDECOMPOSITIONS_LOADEDzthreading.Lock | NoneDECOMPOSITIONS_LOCKztorch.library.Library | NoneVMAP_DECOMPOSITIONS_LIBNonec                    sd  ddl m}  |  }|rtjtdS trdS tdu r"ddl}|	 at tr0	 W d   dS ddl
}|jdddkr>nda	 W d   dS tjdd	d
addlm  d fd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W d   dS 1 sw   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   r&   c                   s:   t d u rtd|  v rt |  |   d S td|  )Nz(VMAP_DECOMPOSITIONS_LIB must not be Nonez!could not find decomposition for )r%   AssertionErrorimplRuntimeError)r.   r,   r   r   #_register_python_decomposition_vmap   s
   zElazy_load_decompositions.<locals>._register_python_decomposition_vmap)r.   r/   r   r&   )r   r   r   r   r   lazy_load_decompositionsr#   r$   	threadingLockosenvirongetlibraryLibraryr%   torch._decompr-   opsr)   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   r5   r7   r3   r   r,   r   r4   l   sF   
"r4   )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&   )__doc__
__future__r   typingr   r   torch._C._functorchr   r   r   r   r   r!   r   r    r5   r#   __annotations__r$   r%   r4   r   r   r   r   <module>   s   



