o
    i                     @   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   sP   ddl m} || sJ t| |d }|d u st|tjs&td| d|  |S )Nr   )is_traceable_wrapper_subclassz
Attribute z% is not a tensor or doesn't exist in )torch.utils._python_dispatchr
   getattr
isinstancetorchTensorRuntimeError)r   r   r
   val r   T/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/torch/export/custom_ops.py_access_subclass_inner_tensor   s   r   c                 O   sB   |  dd\}}t|}t||}t|dsJ |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.
    .   apply)rsplit	importlibimport_moduler   hasattrr   )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    