o
    eic                     @  s  d Z ddlmZ ddlZddlZddlmZmZ ddlm	  m
Z
 ddlm	  mZ ddlm	  mZ ddlmZ erOddlmZ ddlmZ ddlmZmZ 	dWdXddZdYdZddZ		d[d\ddZ			d]ddd^d&d'Z	d_d`d+d,Z	d_d`d-d.Zdd/dad2d3Zddd4dbd7d8Z 	dcdddd9ddd<d=Z!		d_dd>ded?d@Z"dcdfdBdCZ#dDdEdgdGdHZ$dhdidLdMZ	dhdidNdOZ%djdRdSZ&eee
jdT eee
j eee
j ee ee  ee! ee" ee# ee$ eeejdU ee%ejdU ee&ej&dV dS )ka$  
The APIs in this file are exposed as `functorch.*`. They are thin wrappers
around the torch.func.* APIs that have deprecation warnings -- we're trying
to move people to the torch.func.* equivalents.

NB: We don't use *args, **kwargs in the signatures because that changes the
documentation.
    )annotationsN)AnyTYPE_CHECKING)Callable)	argnums_t)	in_dims_t
out_dims_tFapistrnew_api
str | Nonereplace_newlinesboolreturnc                 C  s8   |d u r	d|  }d|  d| d}|r| dd}|S )Nztorch.func.z[We've integrated functorch into PyTorch. As the final step of the 
integration, `functorch.zk` is deprecated as of PyTorch 
2.0 and will be deleted in a future version of PyTorch >= 2.3. 
Please use `z` instead; see the PyTorch 2.0 release notes 
and/or the `torch.func` migration guide for more details 
https://pytorch.org/docs/main/func.migrating.html
 )replace)r	   r   r   warning r   e/var/www/addictedbytheproject.nl/epg/venv/lib/python3.10/site-packages/torch/_functorch/deprecated.pyget_warning   s   
r   Nonec                 C  s"   t | |dd}tj|tdd d S )NT)r      )
stacklevel)r   warningswarnFutureWarning)r	   r   r   r   r   r   warn_deprecated/   s   r   functorch_apiCallable[..., Any]torch_func_apiCallable[..., Any] | Nonenew_api_namec                 C  s\   | j }|d u rtt|}|jd u rd S t||}dt|d }t|d}|j| | _d S )Nz
.. warning::

z    )__name__getattr_impl__doc__r   textwrapindent)r   r    r"   api_namer   warning_noter   r   r   
setup_docs4   s   


r+   error
chunk_sizefuncin_dimsr   out_dimsr   
randomnessr.   
int | Nonec                C  s   t dd tj| ||||dS )Nvmap
torch.vmapr-   )r   apisr4   )r/   r0   r1   r2   r.   r   r   r   r4   F   s   
r4   argnumsr   has_auxc                 C     t d t| ||S )Ngrad)r   r6   r:   r/   r7   r8   r   r   r   r:   R      r:   c                 C  r9   )Ngrad_and_value)r   r6   r=   r;   r   r   r   r=   Y   r<   r=   )r8   primalsr   c                G  s    t d tj| g|R d|iS )Nvjpr8   )r   r%   r?   )r/   r8   r>   r   r   r   r?   `   s   r?   strictr8   tangentsrA   c                C     t d tj| ||||dS )Njvpr@   )r   r%   rD   )r/   r>   rB   rA   r8   r   r   r   rD   e   s   rD   r8   r.   _preallocate_and_copyint | tuple[int, ...]rF   c                C  rC   )NjacrevrE   )r   r%   rH   )r/   r7   r8   r.   rF   r   r   r   rH   q   s   rH   r2   c                C  s   t d tj| |||dS )NjacfwdrI   )r   r%   rJ   )r/   r7   r8   r2   r   r   r   rJ      s   rJ   intc                 C     t d tj| |dS )Nhessian)r7   )r   r%   rM   )r/   r7   r   r   r   rM      s   rM   	mutationsremoverP   c                C  rL   )NfunctionalizerO   )r   r%   rQ   )r/   rP   r   r   r   rQ      r<   rQ   model	nn.Moduledisable_autograd_trackingc                 C     t dd t| |S )Nmake_functionaltorch.func.functional_call)r   _nn_implrV   rR   rT   r   r   r   rV      s   
rV   c                 C  rU   )Nmake_functional_with_buffersrW   )r   rX   rZ   rY   r   r   r   rZ      s   
rZ   modelslist[nn.Module]c                 C  s   t dd t| S )Ncombine_state_for_ensembletorch.func.stack_module_state)r   rX   r]   )r[   r   r   r   r]      s   

r]   r5   rW   r^   )NF)r	   r
   r   r   r   r   r   r
   )N)r	   r
   r   r   r   r   )NN)r   r   r    r!   r"   r   r   r   )r   r   r,   )r/   r   r0   r   r1   r   r2   r
   r.   r3   r   r   )r   F)r/   r   r7   r   r8   r   r   r   )r/   r   r>   r   r8   r   r   r   )r/   r   r>   r   rB   r   rA   r   r8   r   r   r   )r   )r/   r   r7   rG   r8   r   r.   r3   rF   r   r   r   )
r/   r   r7   r   r8   r   r2   r
   r   r   )r/   r   r7   rK   r   r   )r/   r   rP   r
   r   r   )F)rR   rS   rT   r   r   r   )r[   r\   r   r   )'r&   
__future__r   r'   r   typingr   r   torch._functorch.apis
_functorchr6   !torch._functorch.eager_transformseager_transformsr%    torch._functorch.make_functionalrV   rX   torch.nnnncollections.abcr   r   torch._functorch.vmapr   r   r   r   r+   r4   r:   r=   r?   rD   rH   rJ   rM   rQ   rZ   r]   r   r   r   r   <module>   s    	

