
    Vh|                       d Z ddlmZ ddlZddlZddlZddlm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mZmZmZmZmZmZ e
rddlmZ ddlmZm Z m!Z! 	 	 	 	 	 	 	 	 	 	 ddZ"edd       Z#ddZ$e%dk(  r e$        yy)a  
For procedural tests needed for __torch_function__, we use this function
to export method names and signatures as needed by the tests in
test/test_overrides.py.

python -m tools.autograd.gen_annotated_fn_args        aten/src/ATen/native/native_functions.yaml        aten/src/ATen/native/tags.yaml        $OUTPUT_DIR        tools/autograd

Where $OUTPUT_DIR is where you would like the files to be
generated.  In the full build system, OUTPUT_DIR is
torch/testing/_internal/generated
    )annotationsN)defaultdict)AnyTYPE_CHECKING)with_native_function)parse_native_yaml)FileManager   )is_py_fft_functionis_py_linalg_functionis_py_nn_functionis_py_special_functionis_py_torch_functionis_py_variable_methodshould_generate_py_binding)Sequence)ArgumentBaseOperatorNameNativeFunctionc           
     X   t        | |      j                  }t        dft        dft        dft
        dft        dft        dff}g |D ]  \  }}t        t              }|D ]H  }	t        |	      r ||	      s||	j                  j                  j                     j                  |	       J |j                         D ](  }
|
D ]!  }	j                  | dt        |	              # *  t         j"                  j%                  |d      }t'        ||d	
      }|j)                  ddfd       y )Nztorch._C._VariableFunctionsztorch._C._nnztorch._C._linalgztorch._C._specialztorch._C._fftztorch.Tensor.	templatesF)install_dirtemplate_dirdry_runzannotated_fn_args.pyzannotated_fn_args.py.inc                 R    dt        j                  dj                         d      iS )Nannotated_args
z    )textwrapindentjoin)r   s   `/home/dcms/DCMS/lib/python3.12/site-packages/torchgen/packaged/autograd/gen_annotated_fn_args.py<lambda>zgen_annotated.<locals>.<lambda>M   s#    hoodii.GP
     )r   native_functionsr   r   r   r   r   r   r   listr   funcnameappendvaluesgen_annotated_argsospathr!   r	   write_with_template)native_yaml_pathtags_yaml_pathoutautograd_dirr%   mappingspred	namespacegroupsfgrouptemplate_pathfmr   s                @r"   gen_annotatedr;   /   sG    ).  
<=	N+	 23	!45	_-	/H !#N# Ni?J4?P! 	/A-a0Q166;;##$++A.	/ ]]_ 	NE N%%15G5J4K&LMN	NN GGLL{;M	=%	PB!	
r$   c                x   dd}	 	 	 	 	 	 	 	 d	d}g } ||| j                   j                  j                  d       | j                   j                  j                    |       vr) ||| j                   j                  j                  d       | j                   j                  j                   dt        |       dS )
Nc                 
    g dS )N)diagonalround_roundscatter_ rB   r$   r"   _get_kwargs_func_exclusion_listz;gen_annotated_args.<locals>._get_kwargs_func_exclusion_listU   s    
 	
r$   c                   |D ]  }|j                   i }t        |      |d<   |j                  |d<   t        j                  |j
                  d      |d<   t        j                  |j
                        }|r||d<   | j                  |        y )Nis_kwarg_onlyr(   T)simple_typerF   size)defaultstrr(   pythonargument_type_strtypeargument_type_sizer)   )out_argsargsrE   argout_argsize_ts         r"   _add_out_argz(gen_annotated_args.<locals>._add_out_arg^   s      	%C{{&&(G'*='9GO$!hhGFO%+%=%=d&GM" ..sxx8F"(OOG$	%r$   F)rE   Tz: ,)returnz	list[str])rN   zlist[dict[str, Any]]rO   zSequence[Argument]rE   boolrU   None)r'   	argumentsflat_positionalr(   flat_kwarg_onlyrepr)r7   rC   rS   rN   s       r"   r+   r+   S   s    
%&%.@%TX%	%" &(H166++;;5Q
&&++

	$C$EEXqvv//??tTffkkr$x.!133r$   c                 \   t        j                  d      } | j                  ddd       | j                  ddd	       | j                  d
dd       | j                  ddd       | j                         }t	        |j
                  |j                  |j                  |j                         y )Nz!Generate annotated_fn_args script)descriptionr%   NATIVEzpath to native_functions.yaml)metavarhelptagsTAGSzpath to tags.yamlr1   OUTzpath to output directoryautogradAUTOGRADzpath to template directory)	argparseArgumentParseradd_argument
parse_argsr;   r%   ra   r1   rd   )parserrO   s     r"   mainrk   w   s    $$1TUF
H3R   5HI
u3MN
J-I   D$''DHHdmmLr$   __main__)
r/   rI   r0   rI   r1   rI   r2   rI   rU   rW   )r7   r   rU   rI   )rU   rW   )&__doc__
__future__r   rf   r,   r   collectionsr   typingr   r   torchgen.api.pythonapirJ   torchgen.contextr   torchgen.genr   torchgen.utilsr	   gen_python_functionsr   r   r   r   r   r   r   collections.abcr   torchgen.modelr   r   r   r;   r+   rk   __name__rB   r$   r"   <module>rz      s     #  	  # % $ $ 1 * &   (II!!+.!58!HK!	!H  4  4FM zF r$   