o
    ei                     @   sn   d dl Z d dlZejddZed ejeddejedddejd	ed
ejfddZ	dd Z
dS )    NexportFRAGMENTzLaccess_subclass_inner_tensor(Tensor src_subclass_tensor, str attr) -> Tensoraccess_subclass_inner_tensorAutogradPythonsrc_subclass_tensorattrreturnc                 C   s^   ddl m} || stdt|  t| |d }|d u s#t|tjs-td| d|  |S )Nr   )is_traceable_wrapper_subclasszIExpected src_subclass_tensor to be a traceable wrapper subclass, but got z
Attribute z% is not a tensor or doesn't exist in )	torch.utils._python_dispatchr
   AssertionErrortypegetattr
isinstancetorchTensorRuntimeError)r   r   r
   val r   a/var/www/addictedbytheproject.nl/epg/venv/lib/python3.10/site-packages/torch/export/custom_ops.py_access_subclass_inner_tensor   s   r   c                 O   sN   |  dd\}}t|}t||}t|dstd|  d|j|i |S )a]  
    Import a custom autograd function by string name and call it. This is pretty bad
    because:
    1) There is no schema

    Ideally we should automatically wrap custom autograd functions with a custom op, but
    that is too much work because we need to schematize custom autograd functions. For now,
    we just hackily put it in the IR.
    .   applyzExpected function class z to have 'apply' method)rsplit	importlibimport_moduler   hasattrr   r   )function_cls_nameargskwargsmodule_name
class_namemodulefunction_clsr   r   r   ._call_custom_autograd_function_in_pre_dispatch$   s   



r%   )r   r   libraryLibrarylibdefineimplr   strr   r%   r   r   r   r   <module>   s    