
    Vh                       d dl mZ d dl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dZ	 	 	 	 	 	 	 	 	 	 ddZedd       Zedd       Zy)    )annotationsN)cpp)CppSignatureGroup)with_native_function)parse_native_yaml)NativeFunctionTensorOptionsArgumentsVariant)FileManagermapMaybezstd::optional<(.+)>z(?:const\s+)?([A-Z]\w+)c                   dd}t         j                  |       }|d u}|r#| |j                  d      |j                  d       } t        j                  |       }|	 || |      S |j                  d      }| d |  d| |d   } |||      S )Nc                    |rd|  dS | S )Nzstd::optional<> )typeis_opts     a/home/dcms/DCMS/lib/python3.12/site-packages/torchgen/packaged/autograd/gen_variable_factories.pymaybe_optional_typez1fully_qualified_type.<locals>.maybe_optional_type   s    +1vQ';t;       zat::)r   strr   boolreturnr   )OPTIONAL_TYPE_PATTERNmatchstartendTYPE_PATTERN)argument_typer   	opt_matchr   r   indexqualified_types          r   fully_qualified_typer#      s    < &++M:Id"F%iooa&89==;KL}-E}"=&99KKNE%fu-.d=3H2IJN~v66r   c                    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>3   sg    !$ < < >??TU"V CT<>%bll^37 %)2BDU)V$W
 s   A)r   native_functionsis_factory_functionr   write_with_template)outnative_yaml_pathtags_yaml_pathtemplate_pathr5   r1   r2   r3   s         @@r   gen_variable_factoriesr<   (   se     ).  '7R:Mb:QR	=%	PB	
 Ss
   AAc                    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)frA   rD   s      r   r6   r6   >   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(::std::nullopt)z.requires_grad()zinline at::Tensor (z, zW) {
  at::AutoDispatchBelowADInplaceOrView guard;
  return autograd::make_variable(at::z), /*requires_grad=*/z);
}
)r   rA   rB   rC   rD   rE   r
   r?   r@   r   from_native_function	signaturesymint_signatureappend	argumentsr#   r   default
isinstanceargumentr	   join)rF   rA   rD   
is_factorycpp_sigssigsrsigformalsexprsrequires_gradargr"   s                r   r0   r0   H   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*=>#,,(>?
 (
2QR $'88*,< =SXX&%	'( 	
 88:,a		' 23 4&&)hhj\499U3C2DDYZgYh i 	1< Hr   )r   r   r   r   )
r8   r   r9   r   r:   r   r;   r   r   None)rF   r   r   r   )rF   r   r   z
str | None)
__future__r   retorchgen.api.pythonapirC   torchgen.apir   torchgen.api.typesr   torchgen.contextr   torchgen.genr   torchgen.modelr   r	   r
   torchgen.utilsr   r   compiler   r   r#   r<   r6   r0   r   r   r   <module>rk      s   
 # 	 $ $  0 1 * J J 0 #

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