
    Ph              
       0   d dl Z d dlmZmZ d dlmc mZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZmZmZ d dlmZmZ  e j,                  d	      Z e j,                  d
      ZdedefdZdededededdf
dZededefd       Zededee   fd       Zy)    N)ListOptional)cpp)CppSignatureGroup)with_native_function)parse_native_yaml)NativeFunctionTensorOptionsArgumentsVariant)FileManagermapMaybezc10::optional<(.+)>z(?:const\s+)?([A-Z]\w+)argument_typereturnc                 8   dt         dt        dt         fd}t        j                  |       }|d u}|r#| |j	                  d      |j                  d       } t        j                  |       }|	 || |      S |j	                  d      }| d |  d| |d   } |||      S )Ntypeis_optr   c                     |rd|  dS | S )Nzc10::optional<> )r   r   s     |C:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\torchgen/packaged/autograd/gen_variable_factories.pymaybe_optional_typez1fully_qualified_type.<locals>.maybe_optional_type   s    +1vQ';t;       zat::)strboolOPTIONAL_TYPE_PATTERNmatchstartendTYPE_PATTERN)r   r   	opt_matchr   r   indexqualified_types          r   fully_qualified_typer$      s    <# <t < < &++M:Id"F%iooa&89==;KL}-E}"=&99KKNE%fu-.d=3H2IJN~v66r   outnative_yaml_pathtags_yaml_pathtemplate_pathc                     t        ||      j                  }|D cg c]  }t        |      s| c}t        | |d      j	                  ddfd       y c c}w )NF)install_dirtemplate_dirdry_runzvariable_factories.hc                      ddj                          dz   D  cg c]  } d| j                   d c} t        t        t                    dS c c} w )N@zgenerated from z/variable_factories.hz#include <ATen/ops/z.h>)generated_commentops_headersfunction_definitions)template_dir_for_comments	root_namelistr   process_function)fnfactory_functionsfms    r   <lambda>z(gen_variable_factories.<locals>.<lambda>2   sj    !$ < < >??TU"V CTBSB%bll^37BS %)2BDU)V$W
s   A)r   native_functionsis_factory_functionr   write_with_template)r%   r&   r'   r(   r:   r6   r7   r8   s         @@r   gen_variable_factoriesr=   '   sk     ).  '7R&6:Mb:Q&6R	=%	PB	
 Ss
   AAfc                     t         j                  | j                  vryt        j                  | j
                        }t        j                  |       }|xs |j                  d      S )NF_like)	r   functionvariantsr   namefuncpythonhas_tensor_optionsendswith)r>   rC   rF   s      r   r;   r;   =   sN    qzz)88AFFD22157w!77r   c                    t        j                  | j                        }t        j                  |       }|xs |j                  d      }t        j                  | j                  vs|sy t        j                  | d      }|j                  g}|j                  |j                  |j                         d}|D ]@  }g }g }	d}
|j                         D ]  }t        |j                         }|j"                  r.|j                  | d|j                   d|j"                          n |j                  | d|j                          t%        |j&                  t(              r/|	j                  d|j                   d	       |j                   d
}
|	j                  |j                          |d|j                          ddj+                  |       d|j                          ddj+                  |	       d|
 dz  }C |S )Nr@   F)method false z = zat::TensorOptions(z).requires_grad(c10::nullopt)z.requires_grad()zinline at::Tensor (z, zW) {
  at::AutoDispatchBelowADInplaceOrView guard;
  return autograd::make_variable(at::z), /*requires_grad=*/z);
}
)r   rC   rD   rE   rF   rG   r   rA   rB   r   from_native_function	signaturesymint_signatureappend	argumentsr$   r   default
isinstanceargumentr
   join)r>   rC   rF   
is_factorycpp_sigssigsrsigformalsexprsrequires_gradargr#   s                r   r5   r5   G   s   88AFFD2215#=t}}W'=Jqzz) 55aFHD  ,H--.
A==?C1#((;N{{.!1388*C}MN.!1388*=>#,,(>?
 (
2OP $'88*,< =SXX&% #( 	
 88:,a		' 23 4&&)hhj\499U3C2DDYZgYh i 	1 < Hr   )retypingr   r   torchgen.api.pythonapirE   torchgen.apir   torchgen.api.typesr   torchgen.contextr   torchgen.genr   torchgen.modelr	   r
   r   torchgen.utilsr   r   compiler   r    r   r$   r=   r   r;   r5   r   r   r   <module>rk      s   
 
 ! $ $  0 1 * J J 0"

#9: rzz45
7 7 7 	 #58IL	, 8> 8d 8 8 + +8C= + +r   