
    Ph              
       
   d 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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mZmZ ddlmZ d	d
lmZmZmZmZmZmZmZ de de de de ddf
dZ!edede f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
    N)defaultdict)AnyDictListSequence)with_native_function)parse_native_yaml)ArgumentBaseOperatorNameNativeFunction)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native_yaml_pathtags_yaml_pathoutautograd_dirreturnc           
      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   {C:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\torchgen/packaged/autograd/gen_annotated_fn_args.py<lambda>zgen_annotated.<locals>.<lambda>H   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)r   r   r   r   r*   mappingspred	namespacegroupsfgrouptemplate_pathfmr"   s                @r'   gen_annotatedr<   *   s-    ).  
<=	N+	 23	!45	_-	/H !#N#i?J4?P!A-a0Q166;;##$++A. " ]]_E%%15G5J4K&LM  % $ GGLL{;M	=%	PB!	
r)   r8   c                    dt         t           fd}dt         t        t        t        f      dt        t
           dt        dd fd}g } ||| j                  j                  j                  d       | j                  j                  j                    |       vr) ||| j                  j                  j                  d	       | j                  j                  j                   d
t        |       dS )Nr   c                  
    g dS )N)diagonalround_roundscatter_ rC   r)   r'   _get_kwargs_func_exclusion_listz;gen_annotated_args.<locals>._get_kwargs_func_exclusion_listP   s    
 	
r)   out_argsargsis_kwarg_onlyc                    |D ]  }|j                   i }t        |      |d<   |j                  |d<   t        j                  |j
                  d      |d<   t        j                  |j
                        }|r||d<   | j                  |        y )NrG   r-   T)simple_typerI   size)defaultstrr-   pythonargument_type_strtypeargument_type_sizer.   )rE   rF   rG   argout_argsize_ts         r'   _add_out_argz(gen_annotated_args.<locals>._add_out_argY   s     C{{&&(G'*='9GO$!hhGFO%+%=%=d&GM" ..sxx8F"(OOG$ r)   F)rG   Tz: ,)r   rL   r   r   r   r
   boolr,   	argumentsflat_positionalr-   flat_kwarg_onlyrepr)r8   rD   rT   rE   s       r'   r0   r0   N   s    
T#Y 
%tCH~&%.6x.@%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.yamlr   OUTzpath to output directoryautogradAUTOGRADzpath to template directory)	argparseArgumentParseradd_argument
parse_argsr<   r*   r`   r   rc   )parserrF   s     r'   mainrj   r   s    $$1TUF
H3R   5HI
u3MN
J-I   D$''DHHdmmLr)   __main__)r   N)%__doc__re   r1   r$   collectionsr   typingr   r   r   r   torchgen.api.pythonapirM   torchgen.contextr   torchgen.genr	   torchgen.modelr
   r   r   torchgen.utilsr   gen_python_functionsr   r   r   r   r   r   r   rL   r<   r0   rj   __name__rC   r)   r'   <module>rw      s      	  # , , $ $ 1 * E E &  !!+.!58!HK!	!H  4.  4S  4  4FM zF r)   