§
    Ì²Åj[  ã                  ó  — d dl mZ d dlZd dlZd dlmZ d dlmZ d dlm	Z	m
Z
mZ d dl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 d d
lmZmZmZmZ d dlm Z m!Z!m"Z" d dl#m$Z$ d dl%m&Z&m'Z' d dl(m)Z) er
d dl*m+Z+m,Z,m-Z-  edg d¢¦  «        Z.dQd„Z/dRd„Z0dSd„Z1 G d„ d ¦  «        Z2dTd!„Z3e2j4        e2j5        e2j6        e2j7        e2j8        e2j9        e2j:        d"d"e2j;        d"d#d$d%d&d'd(d)d"d*d+d,d-d.fdUdO„Z<e=dPk    r e3¦   «          dS dS )Vé    )ÚannotationsN)Ú
namedtuple)ÚPath)ÚAnyÚCallableÚTYPE_CHECKING)Ú	setValueT)ÚBaseCppType)Ú	GenLazyIRÚGenLazyNativeFuncDefinitionÚGenTSLazyIR)Úget_grouped_native_functionsÚparse_native_yaml)Úerror_on_missing_kernelsÚgen_dispatcher_registrationsÚ"gen_dispatchkey_nativefunc_headersÚparse_backend_yaml)ÚNativeFunctionÚNativeFunctionsGroupÚOperatorName)ÚSelectiveBuilder)ÚFileManagerÚNamespaceHelper)Ú
YamlLoader)ÚIterableÚIteratorÚSequenceÚParsedExternalYaml)Úbackend_keyÚautograd_keyÚcpp_namespaceÚbackend_indicesÚfull_codegenÚbackend_yaml_pathÚstrÚgrouped_native_functionsú/Sequence[NativeFunction | NativeFunctionsGroup]Úreturnú8tuple[list[OperatorName], list[Any], list[OperatorName]]c                óü  — t          | ¦  «        5 }t          j        |t          ¬¦  «        }d d d ¦  «         n# 1 swxY w Y   t	          |t
          ¦  «        sJ ‚|                     dg ¦  «        }|                     dg ¦  «        }|                     dg ¦  «        }t	          |t          ¦  «        sJ ‚t	          |t          ¦  «        sJ ‚t	          |t          ¦  «        sJ ‚d„ |D ¦   «         }d„ |D ¦   «         }|||fS )N)ÚLoaderr#   Ú
non_nativeÚir_genc                ó6   — g | ]}t          j        |¦  «        ‘ŒS © ©r   Úparse©Ú.0Únames     úIC:\Projects\Historical\venv\Lib\site-packages\torchgen/gen_lazy_tensor.pyú
<listcomp>z/parse_native_functions_keys.<locals>.<listcomp>p   s#   € ÐNÐNÐN¸�LÔ.¨tÑ4Ô4ÐNÐNÐNó    c                ó6   — g | ]}t          j        |¦  «        ‘ŒS r/   r0   r2   s     r5   r6   z/parse_native_functions_keys.<locals>.<listcomp>q   s#   € ÐBÐBÐB°4•lÔ(¨Ñ.Ô.ÐBÐBÐBr7   )ÚopenÚyamlÚloadr   Ú
isinstanceÚdictÚpopÚlist)	r$   r&   ÚfÚyaml_valuesr#   r,   r-   Úfull_codegen_opnamesÚir_gen_opnamess	            r5   Úparse_native_functions_keysrD   b   s>  € õ 
ÐÑ	 Ô	 ð 6 AÝ”i ­*Ð5Ñ5Ô5ˆð6ð 6ð 6ñ 6ô 6ð 6ð 6ð 6ð 6ð 6ð 6øøøð 6ð 6ð 6ð 6å�k¥4Ñ(Ô(Ð(Ð(Ð(à—?’? >°2Ñ6Ô6€LØ—’ ¨rÑ2Ô2€JØ�_Š_˜X rÑ*Ô*€FÝ�l¥DÑ)Ô)Ð)Ð)Ð)Ý�j¥$Ñ'Ô'Ð'Ð'Ð'Ý�f�dÑ#Ô#Ð#Ð#Ð#ØNÐNÀÐNÑNÔNÐØBÐB¸6ÐBÑBÔB€NØ ¨^Ð;Ð;s   �8¸<¿<Úshape_inference_hdrÚexpected_shape_infr_declsú	list[str]ÚNonec                ó”  ‡— 	 t          | ¦  «        5 }|                     ¦   «         }t          |                     d¦  «        ¦  «        Šd d d ¦  «         n# 1 swxY w Y   n%# t          $ r}t          d| › �¦  «        |‚d }~ww xY wˆfd„|D ¦   «         }|r2t          d| › dt          j         	                    |¦  «        › �¦  «        ‚d S )Nú
z<Unable to read from the specified shape_inference_hdr file: c                ó   •— g | ]}|‰v¯|‘Œ	S r/   r/   )r3   ÚdeclÚshape_infr_decl_liness     €r5   r6   z3validate_shape_inference_header.<locals>.<listcomp>ƒ   s+   ø€ ð ð ð Ø°dÐBWÐ6WÐ6WˆÐ6WÐ6WÐ6Wr7   zGMissing shape inference function.

Please add declare this function in zD:

and implement it in the corresponding shape_inference.cpp file.

)
r9   ÚreadÚsetÚsplitÚOSErrorÚAssertionErrorÚ	ExceptionÚosÚlinesepÚjoin)rE   rF   r@   Úshape_infr_declsÚeÚmissing_declsrM   s         @r5   Úvalidate_shape_inference_headerrZ   u   sd  ø€ ðÝÐ%Ñ&Ô&ð 	F¨!Ø Ÿvšv™xœxÐÝ$'Ð(8×(>Ò(>¸tÑ(DÔ(DÑ$EÔ$EÐ!ð	Fð 	Fð 	Fñ 	Fô 	Fð 	Fð 	Fð 	Fð 	Fð 	Fð 	Føøøð 	Fð 	Fð 	Fð 	Føøõ ð ð ð ÝØ`ÐK^Ð`Ð`ñ
ô 
àð	øøøøðøøøðð ð ð Ø2ðñ ô €Mð ð 
Ýð$Ø%8ð$ð $õ „‡‚�ÑÔð$ð $ñ
ô 
ð 	
ð
ð 
s:   ƒA! ’7AÁ	A! ÁAÁA! ÁAÁA! Á!
BÁ+A>Á>Bc                 ó   — dS )Naå  at::Tensor to_meta(const at::Tensor& tensor) {
  // undefined tensors can't be converted to the meta device, since they don't have sizes/strides
  if (!tensor.defined()) return tensor;
  auto out = at::native::empty_strided_meta_symint(tensor.sym_sizes(), tensor.sym_strides(), /*dtype=*/tensor.scalar_type(), /*layout=*/tensor.layout(), /*device=*/c10::Device(c10::kMeta), /*pin_memory=*/std::nullopt);
  // needs to handle wrapped numbers, so dtype promotion works properly.
  if (tensor.unsafeGetTensorImpl()->is_wrapped_number()) {
    out.unsafeGetTensorImpl()->set_wrapped_number(true);
  }
  return out;
}
std::optional<at::Tensor> to_meta(const std::optional<at::Tensor>& tensor) {
  if (tensor.has_value()) {
    return to_meta(*tensor);
  }
  return std::nullopt;
}

std::vector<at::Tensor> to_meta(at::ITensorListRef t_list) {
  std::vector<at::Tensor> outs;
  outs.reserve(t_list.size());
  for (const auto& tensor : t_list) {
    outs.push_back(to_meta(tensor));
  }
  return outs;
}
r/   r/   r7   r5   Úget_ltc_helper_fnsr\   �   s   € ðð r7   c                  ó€   — e Zd ZU dZded<   dZded<   dZded<   d	Zded
<   dZded<   e	Z
ded<   eZded<   dZded<   dS )Údefault_argsÚNoder%   Ú	node_baseNú
str | NoneÚnode_base_hdrú&torch/csrc/lazy/core/shape_inference.hrE   ztorch::lazy::LazyTensorÚtensor_classztorch/csrc/lazy/core/tensor.hÚtensor_class_hdrútype[GenLazyIR]Úlazy_ir_generatorú!type[GenLazyNativeFuncDefinition]Ú native_func_definition_generatorÚTorchScriptÚbackend_name)Ú__name__Ú
__module__Ú__qualname__r`   Ú__annotations__rb   rE   rd   re   r   rg   r   ri   rk   r/   r7   r5   r^   r^   °   sª   € € € € € € Ø€IÐÐÐÑØ $€MÐ$Ð$Ð$Ñ$ØGÐÐGÐGÐGÑGØ1€LÐ1Ð1Ð1Ñ1Ø;ÐÐ;Ð;Ð;Ñ;Ø)2ÐÐ2Ð2Ð2Ñ2à#ð %ð ð ð ñ ð &€LÐ%Ð%Ð%Ñ%Ð%Ð%r7   r^   c                 óÖ  — t          j        d¬¦  «        } |                      dddd¬¦  «         |                      dd	d
d¬¦  «         |                      ddt          dd¬¦  «         |                      ddt          d d¬¦  «         |                      dddd¬¦  «         |                      ddt          t
          j        d¬¦  «         |                      ddt          t
          j        d¬¦  «         |                      ddt          t
          j        d ¬¦  «         |                      d!d"t          t
          j	        d#¬¦  «         |                      d$d%t          t
          j
        d&¬¦  «         |                      d'd(t          t
          j        d)¬¦  «         |                      ¦   «         }t          t          ¦  «        j        j        j                             ¦   «         }t	          |d*z  d+z  d,z  ¦  «        }t
          j        }|j        rt&          }t
          j        }t+          ||j        |j        |j        |j        |j        |j        |j	        |j
        |j        |||j        ¦  «         d S )-Nz"Generate Lazy Tensor backend files)Údescriptionz-sz--source-yamlz--source_yamlzApath to source yaml file containing operator external definitions)Úhelpz-oz--output-dirz--output_dirzoutput directoryz	--dry-runz	--dry_runF)ÚtypeÚdefaultrr   z--impl-pathz--impl_pathz9path to the source C++ file containing kernel definitionsz--gen-ts-loweringsz--gen_ts_loweringsÚ
store_truezIGenerate TorchScript lowerings in addition to Lazy IR and NativeFunctions)Úactionrr   z--node-basez--node_basez7Name of backend specific custom Lazy IR Node base classz--node-base-hdrz--node_base_hdrz;Path to header file defining custom Lazy IR Node base classz--shape-inference-hdrz--shape_inference_hdrzBPath to header file defining custom Lazy shape inference functionsz--tensor-classz--tensor_classz1Name of backend specific custom Lazy Tensor classz--tensor-class-hdrz--tensor_class_hdrz5Path to header file defining custom Lazy Tensor classz--backend-namez--backend_namezName of the backend to generateÚatenÚsrcÚATen)ÚargparseÚArgumentParserÚadd_argumentÚboolr%   r^   r`   rb   rE   rd   re   rk   Ú
parse_argsr   Ú__file__ÚparentÚabsoluterg   Úgen_ts_loweringsr   ri   Úrun_gen_lazy_tensorÚsource_yamlÚ
output_dirÚdry_runÚ	impl_path)ÚparserÚoptionsÚ
torch_rootÚ	aten_pathrg   ri   s         r5   ÚmainrŒ   ½   sß  € ÝÔ$Ð1UÐVÑVÔV€FØ
×ÒØØØØPð	 ñ ô ð ð ×Ò˜˜n¨nÐCUÐÑVÔVÐVØ
×ÒØ�[¥t°UÐASð ñ ô ð ð ×ÒØØÝØØHð ñ ô ð ð ×ÒØØØØXð	 ñ ô ð ð ×ÒØØÝÝÔ&ØFð ñ ô ð ð ×ÒØØÝÝÔ*ØJð ñ ô ð ð ×ÒØØÝÝÔ0ØQð ñ ô ð ð ×ÒØØÝÝÔ)Ø@ð ñ ô ð ð ×ÒØØÝÝÔ-ØDð ñ ô ð ð ×ÒØØÝÝÔ)Ø.ð ñ ô ð ð ×ÒÑ!Ô!€Gõ •h‘”Ô&Ô-Ô4×=Ò=Ñ?Ô?€JÝ�J Ñ'¨%Ñ/°&Ñ8Ñ9Ô9€IÝ)5Ô)GÐØÔð (Ý'ÐåÔ5ð %õ ØØÔØÔØŒØÔØÔØÔØÔØÔ ØÔ#ØØ(ØÔñô ð ð ð r7   FTztorch::lazyÚGetTensorListÚ$GetLtcTensorOrCreateForWrappedNumberÚTryGetLtcTensorzTORCH_LAZY_FN_COUNTER("lazy::")zLazyTensor::Createz$torch::lazy::CreateAtenFromLtcTensorz$torch::lazy::TupleAtenFromLtcTensorsztorch::lazy::ValueÚLazyTensorPtrztorch::lazy::GetBackendDevicer‹   r„   r…   r†   r}   r‡   ra   r`   rb   rd   re   rg   rf   ri   rh   Úbuild_in_treeÚper_operator_headersrk   Úgen_forced_fallback_codeÚuse_lazy_shapeÚbackend_namespaceÚget_tensorlistÚget_tensor_or_wrap_numberÚtry_get_tensorÚmetrics_counterÚcreate_tensorÚcreate_from_first_tensorÚcreate_aten_from_ltc_tensorÚtuple_aten_from_ltc_tensorsÚlazy_value_classÚlazy_tensor_ptrÚget_device_fnc                ó¦  ‡‡‡‡‡‡	‡‡‡‡‡‡‡‡‡‡‡‡‡‡.‡/‡0‡1‡2‡3‡4‡5‡6‡7— |                      d¦  «        }|d         }d                     |d d…         ¦  «        }t          t          ||¦  «        ¦  «         t          j                             | d¦  «        Š7d ˆˆ7fd„}  | ‰¦  «        }!t          j                             | d	¦  «        }"t          j                             | d
¦  «        }#t          |"|#¦  «        }$|$j        |$j        c}%Š.t          |%¦  «        Š2d!d„}&t          ‰2|&¬¦  «        Š2t          |‰2‰.¦  «        }'|'j        Š/|'j        }(|'j        })|'j        Š.t          |‰2¦  «        \  Š1Š5Š3‰1fd"d„Š0t!          j        ¦   «         }*‰/€J ‚‰.‰/                              ¦   «         }+|�t'          |%‰.‰/|(|+|‰1¦  «         	 ‰	�Bt)           ‰0t+          j        ‰.‰/         ‰¦  «        ‰2¦  «        ¦  «        },t/          ‰	|,¦  «         |+€J ‚t1          |!|+|)‰.‰2‰/|(|¦  «         |(€‰/gn‰/|(gD ]}-t3          |!‰|+‰.‰2‰/|-|*|||d¬¦  «         Œt5          |)¦  «        Š6|!                     ‰/› d�dˆ.ˆ/ˆˆ0ˆˆˆˆˆˆˆˆ2ˆˆˆˆ6ˆˆ	ˆˆˆˆfd„¦  «          |
‰.‰/         |||¦  «        Š4|!                     ddˆ0ˆ1ˆ2ˆ3ˆ4ˆˆ6fd„¦  «         |!                     ddˆ4ˆˆ5ˆ6fd„¦  «         d S )#Nz::éÿÿÿÿÚ	templatesÚinstall_dirr%   r(   r   c                ó(   •— t          | ‰‰¬¦  «        S )N)r¤   Útemplate_dirr†   )r   )r¤   r†   r¦   s    €€r5   Úmake_file_managerz.run_gen_lazy_tensor.<locals>.make_file_managerI  s!   ø€ ÝØ#°,Èð
ñ 
ô 
ð 	
r7   znative/native_functions.yamlznative/tags.yamlr@   ú%NativeFunctionsGroup | NativeFunctionc                ó„   — t          | t          ¦  «        r| j        j        n| j        }t	          |j        j        ¦  «        S )z¯
        We sort the native function because of the note in concat_map_codegen.
        TODO(alanwaketan): Remove this sorting hack once all ops are grouped properly.
        )r<   r   Ú
functionalÚfuncr%   r4   )r@   r«   s     r5   Úsort_native_functionz1run_gen_lazy_tensor.<locals>.sort_native_functionY  s7   € õ
 %/¨qÕ2FÑ$GÔ$GÐSˆqŒ|Ô Ð ÈQÌVˆÝ�4”9”>Ñ"Ô"Ð"r7   )Úkeyr«   ú)Callable[[NativeFunction], Sequence[str]]Úxsú/Iterable[NativeFunctionsGroup | NativeFunction]Úops_listúlist[OperatorName]úIterator[str]c              3  óÎ   K  — |D ]_}t          |t          ¦  «        r!t          |                     ¦   «         ¦  «        n|g}|D ]!}|j        j        |v r | |¦  «        E d{V —† Œ"Œ`dS )zÛ
        We code-gen for the functional variant, which is all we need for IR classes/lowerings/shape inferences, but we
        only code-gen additional entries for the inplace variant for the native functions.
        N)r<   r   r?   Ú	functionsr«   r4   )r«   r¯   r±   ÚxÚfsr@   s         r5   Úconcat_map_codegenz/run_gen_lazy_tensor.<locals>.concat_map_codegenu  s“   è è € ð ð 	'ð 	'ˆAÝ(2°1Õ6JÑ(KÔ(KÐT•�a—k’k‘m”mÑ$Ô$Ð$ÐRSÐQTˆBØð 'ð '�Ø”6”; (Ð*Ð*Ø#˜t A™wœwÐ&Ð&Ð&Ð&Ð&Ð&Ð&øð'ð	'ð 	'r7   F)r‘   r’   rk   Úeager_registrationzNativeFunctions.cppzDispatchKeyNativeFunctions.cppc                 ó  •— d„ ‰‰dddddddd	d
dd‰› d‰› d�‰› d�g‰rdgng z   D ¦   «         t          ¦   «         d‰j        ‰j        t           ‰ ‰‰› d�‰ ‰         ‰‰‰‰
‰	‰‰‰‰‰‰‰‰¦  «        ‰¦  «        ¦  «        dœS )Nc                ó   — g | ]}d |› d�‘Œ	S ©z
#include <ú>r/   ©r3   Úpaths     r5   r6   z9run_gen_lazy_tensor.<locals>.<lambda>.<locals>.<listcomp>Ø  s3   € ð ð ð àð %˜TÐ$Ð$Ð$ðð ð r7   zATen/Functions.hzATen/native/TensorConversions.hzATen/NativeFunctions.hz6ATen/CompositeExplicitAutogradNonFunctionalFunctions.hzATen/MetaFunctions.hzATen/Operators.hzATen/native/CPUFallback.hú!torch/csrc/lazy/core/ir_builder.hz*torch/csrc/lazy/core/lazy_graph_executor.hztorch/csrc/lazy/core/metrics.hútorch/csrc/lazy/core/shape.hú/zNativeFunctions.hz	/LazyIr.hz.torch/csrc/lazy/ts_backend/ts_eager_fallback.hÚ ÚNativeFunctions)ÚincludesÚ
helper_fnsÚnative_functions_includeÚnamespace_prologueÚnamespace_epilogueÚnative_function_definitions)r\   ÚprologueÚepiloguer?   )r"   r   r•   r¸   rœ   r›   rš   r“   r    r—   r–   r&   rŸ   r™   ri   Ú	ns_helperr…   rE   rd   re   r˜   r�   s   €€€€€€€€€€€€€€€€€€€€€€r5   ú<lambda>z%run_gen_lazy_tensor.<locals>.<lambda>×  s  ø€ ðð ð %Ø'Ø&Ø5Ø,ØLØ*Ø&Ø/Ø7Ø@Ø4Ø2Ø!ÐBÐB KÐBÐBÐBØ!Ð,Ð,Ð,ðð& 0ðÐEÐFÐFàñ)ðñ ô õ2 -Ñ.Ô.Ø(*Ø"+Ô"4Ø"+Ô"4Ý+/Ø"Ð"Ø4Ð4Ø&Ð7Ð7Ð7Ø'¨Ô4Ø$Ø0Ø)Ø&Ø1Ø&Ø'Ø%Ø0Ø3Ø3Ø'Ø%ñô ð" -ñ%ô ñ,ô ,ð=4
ð 4
€ r7   zLazyIr.hc            
     ó„   •— d„ dD ¦   «         ‰�d‰› d�gng t           ‰ ‰‰‰‰z   ¦  «        ¦  «        ‰j        ‰j        dœS )Nc                ó   — g | ]}d |› d�‘Œ	S r¼   r/   r¾   s     r5   r6   z9run_gen_lazy_tensor.<locals>.<lambda>.<locals>.<listcomp>  s3   € ð ð ð àð %˜TÐ$Ð$Ð$ðð ð r7   )zATen/core/Formatting.hzc10/core/ScalarType.hztorch/csrc/lazy/core/hash.hútorch/csrc/lazy/core/ir.hrÁ   ÚoptionalÚvectorz
#include "ú")Úlazy_ir_sysincÚlazy_ir_incÚir_declarationsrÈ   rÉ   )r?   rË   rÌ   )r¸   r#   r&   r-   Úlazy_ir_objrb   rÍ   s   €€€€€€€r5   rÎ   z%run_gen_lazy_tensor.<locals>.<lambda>  s†   ø€ ðð ððñ ô ð Ð(ð :¨Ð9Ð9Ð9Ð:Ð:àÝ#Ø"Ð"ØÐ!9¸<È&Ñ;Pñô ñ ô  ð
 #,Ô"4Ø"+Ô"4ð-
ð 
€ r7   zLazyNonNativeIr.hc                 ót   •— d„ g d¢‰r‰gng z   D ¦   «         t          j        ‰‰ ¦  «        ‰j        ‰j        dœS )Nc                ó   — g | ]
}|¯d |› d�‘ŒS r¼   r/   r¾   s     r5   r6   z9run_gen_lazy_tensor.<locals>.<lambda>.<locals>.<listcomp>4  s;   € ð 
'ð 
'ð 
'àð ð
'Ø$˜TÐ$Ð$Ð$ð
'ð 
'ð 
'r7   )rÑ   rÀ   z+torch/csrc/lazy/core/internal_ops/ltc_ops.hrc   )Úlazy_non_native_ir_incÚnon_native_ir_nodesrÈ   rÉ   )ÚdestÚ!generate_non_native_lazy_ir_nodesrË   rÌ   )rØ   rb   r,   rÍ   s   €€€€r5   rÎ   z%run_gen_lazy_tensor.<locals>.<lambda>3  sq   ø€ ð
'ð 
'ðð ð ð '4Ð;�M�?�?¸ñ=ð
'ñ 
'ô 
'õ $(Ô#IØ˜Kñ$ô $ð #,Ô"4Ø"+Ô"4ð!
ð 
€ r7   )r¤   r%   r(   r   )r@   r¨   r(   r%   )r«   r®   r¯   r°   r±   r²   r(   r³   )rP   rV   r	   r
   rT   r¿   r   Únative_functionsr"   r   Úsortedr   r   r    r!   rD   r   Úget_nop_selectorÚnative_function_class_namer   r?   rÝ   ÚGenLazyShapeInferenceDefinitionrZ   r   r   r   Úwrite_with_template)8r‹   r„   r…   r†   r‡   r`   rb   rd   re   rE   rg   ri   r‘   r’   rk   r“   r”   r•   r–   r—   r˜   r™   rš   r›   rœ   r�   rž   rŸ   r    Ú	lv_tokensÚlv_classÚlv_nsr§   ÚfmÚnative_yaml_pathÚtags_yaml_pathÚparsed_yamlrß   r¬   Úparsed_backend_yamlr    r!   ÚselectorÚ
class_namerF   Údispatch_keyr"   r   r¸   r#   r&   r-   rØ   r,   rÍ   r¦   s8     ``  ```` `   ` ````````` ``                 @@@@@@@@@@r5   rƒ   rƒ     s–  øøøøøøøøøøøøøøøøøøøøøøøøøøøøø€ ðL !×&Ò& tÑ,Ô,€IØ˜Œ}€HØ�IŠI�i   ”nÑ%Ô%€EÝ�k˜% Ñ*Ô*Ñ+Ô+Ð+Ý”7—<’< 	¨;Ñ7Ô7€Lð
ð 
ð 
ð 
ð 
ð 
ð 
ð
 
Ð	˜:Ñ	&Ô	&€Bå”w—|’| IÐ/MÑNÔNÐÝ”W—\’\ )Ð-?Ñ@Ô@€NÝ#Ð$4°nÑEÔE€KàÔ$ØÔ#ð &Ð�oõ  <Ð<LÑMÔMÐð#ð #ð #ð #õ  &Ø Ð&:ð ñ  ô  Ðõ -ØÐ-¨ñô Ðð &Ô1€KØ&Ô3€LØ'Ô5€MØ)Ô9€Oõ (CØÐ-ñ(ô (Ñ$€L�*˜fð (4ð'ð 'ð 'ð 'ð 'õ   Ô0Ñ2Ô2€HàÐ"Ð"Ð"Ø  Ô-×HÒHÑJÔJ€JàÐÝ ØØØØØØØñ	
ô 	
ð 	
ðð Ð&Ý$(ØÐÝÔ4Ø# KÔ0°,ñô ð )ñ	ô ñ%
ô %
Ð!õ 	(Ð(;Ð=VÑWÔWÐWØÐ!Ð!Ð!õ 'Ø
ØØØØ ØØØñ	ô 	ð 	ð &Ð-ˆˆˆ°KÀÐ3Nð
ð 
ˆõ 	%ØØØØØ$ØØØØ'Ø!5Ø%Ø$ð	
ñ 	
ô 	
ð 	
ð 	
õ    Ñ.Ô.€IØ×ÒØÐ+Ð+Ð+Ø(ð4	
ð 4	
ð 4	
ð 4	
ð 4	
ð 4	
ð 4	
ð 4	
ð 4	
ð 4	
ð 4	
ð 4	
ð 4	
ð 4	
ð 4	
ð 4	
ð 4	
ð 4	
ð 4	
ð 4	
ð 4	
ð 4	
ð 4	
ð 4	
ð 4	
ñ8ô 8ð 8ðt $Ð#Ø˜Ô$ l°I¸~ñô €Kð ×ÒØØð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ñô ð ð< ×ÒØØð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ñô ð ð ð r7   Ú__main__)r$   r%   r&   r'   r(   r)   )rE   r%   rF   rG   r(   rH   )r(   r%   )r(   rH   )<r‹   r%   r„   r%   r…   r%   r†   r}   r‡   ra   r`   r%   rb   ra   rd   r%   re   r%   rE   r%   rg   rf   ri   rh   r‘   r}   r’   r}   rk   r%   r“   r}   r”   r}   r•   r%   r–   r%   r—   r%   r˜   r%   r™   r%   rš   r%   r›   r}   rœ   r%   r�   r%   rž   r%   rŸ   r%   r    r%   r(   rH   )>Ú
__future__r   rz   rT   Úcollectionsr   Úpathlibr   Útypingr   r   r   r:   Útorchgen.destrÝ   Útorchgen.api.lazyr	   Útorchgen.api.typesr
   Útorchgen.dest.lazy_irr   r   r   Útorchgen.genr   r   Útorchgen.gen_backend_stubsr   r   r   r   Útorchgen.modelr   r   r   Ú!torchgen.selective_build.selectorr   Útorchgen.utilsr   r   Útorchgen.yaml_utilsr   Úcollections.abcr   r   r   r   rD   rZ   r\   r^   rŒ   r`   rb   rd   re   rE   rg   ri   rk   rƒ   rl   r/   r7   r5   ú<module>r      sì  ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø 	€	€	€	Ø "Ð "Ð "Ð "Ð "Ð "Ø Ð Ð Ð Ð Ð Ø /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /à €€€à Ð Ð Ð Ð Ð Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø *Ð *Ð *Ð *Ð *Ð *Ø UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UØ HÐ HÐ HÐ HÐ HÐ HÐ HÐ Hðð ð ð ð ð ð ð ð ð ð ð ð NÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MØ >Ð >Ð >Ð >Ð >Ð >Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø *Ð *Ð *Ð *Ð *Ð *ð ð =Ø<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<ð~  �ZØØWÐWÐWñô Ð ð<ð <ð <ð <ð&
ð 
ð 
ð 
ð6ð ð ð ð@
&ð 
&ð 
&ð 
&ð 
&ñ 
&ô 
&ð 
&ð]ð ]ð ]ð ]ðL "Ô+Ø ,Ô :Ø$Ô1Ø(Ô9Ø+Ô?Ø)5Ô)Gð 	Ô5àð "'Ø$Ô1Ø%*Øð +Ø)Ø%KØ+Ø<Ø-Ø%*Ø'MØ'MØ0Ø*Ø8ðIhð hð hð hð hðV	 ˆzÒÐØ€D�F„F€F€F€Fð Ðr7   