Ë
    Z^(hÔ  ã                  ó¬   — d dl mZ d dlmZ d dlmZ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Zdd„Z ed	¬
«       G d„ d«      «       Zy)é    )Úannotations)Ú	dataclass)ÚCallableÚTYPE_CHECKING)ÚArgumentÚBaseTyÚBaseTypeÚListTypeÚNativeFunctionÚOptionalTypeÚType)ÚSequence)ÚBindingÚCTypeÚ
NamedCTypez
	c                óJ   — | j                   j                  j                  «       S )N)ÚfuncÚnameÚunambiguous_name)Úfs    ú^/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torchgen/executorch/api/unboxing.pyr   r      s   € Ø�6‰6�;‰;×'Ñ'Ó)Ð)ó    T)Úfrozenc                  ó˜   — e Zd ZU dZded<   	 	 	 	 dd„Zddœ	 	 	 	 	 	 	 dd„Z	 	 	 	 	 	 	 	 dd„Z	 	 	 	 	 	 	 	 	 	 dd	„Z	 	 	 	 	 	 	 	 	 	 dd
„Z	y)ÚUnboxingaý  
    Takes a sequence of Bindings and unbox EValues to these Bindings. Return generated code that performs correct unboxing.
    A sample generated code:
    // aten::mul.out(Tensor self, Tensor other, *, Tensor(a!) out) -> Tensor(a!)
    void mul_out(EValue** stack) {
        EValue& self = *stack[0];
        EValue& other = *stack[1];
        EValue& out = *stack[2];
        const torch::executor::Tensor & self_base = self.to<torch::executor::Tensor>();
        const torch::executor::Tensor & other_base = other.to<torch::executor::Tensor>();
        torch::executor::Tensor & out_base = out.to<torch::executor::Tensor>();

        EXECUTORCH_SCOPE_PROF("native_call_mul.out");
        torch::executor::mul_outf(self_base, other_base, out_base);


    }
    zCallable[..., NamedCType]Úargument_type_genc                óê  — t        t        |«      «      D �cg c]  }d||   j                  › d|› d�‘Œ }}g }|D ]¯  }t        |j                  t
        «      st        d|› �«      ‚|j                  }| j                  |j                  |j                  |j                  ¬«      \  }}}	}
|j                  |
«       |j                  |	«       |j                  |j                  |«      «       Œ± ||fS c c}w )NzEValue& z
 = *stack[z];z7Unexpected argument type, expecting `Argument` but got ©Úmutable)ÚrangeÚlenr   Ú
isinstanceÚargumentr   Ú	ExceptionÚargumenttype_evalue_convertÚtypeÚis_writeÚextendÚappendÚ	with_name)ÚselfÚargsÚiÚ	code_listÚbinding_listÚargr#   Úunboxed_nameÚ_ÚcodeÚdecls              r   Úconvert_argumentszUnboxing.convert_arguments<   sú   € ô HMÌSÐQUËYÓGWÖXÀ!�x  Q¡§¡˜~¨Z¸°s¸"Ò=ÐXˆ	ÐXØˆØò 	=ˆCä˜cŸl™l¬HÔ5ÜØMÈcÈUÐSóð ð "%§¡ˆHØ*.×*JÑ*JØ—‘˜xŸ}™}°h×6GÑ6Gð +Kó +Ñ'ˆL˜!˜T 4ð ×Ñ˜TÔ"Ø×Ñ˜TÔ"Ø×Ñ §¡¨lÓ ;Õ<ð	=ð ˜YÐ&Ð&ùò Ys   —C0Fr   c               ó~  — | j                  |||¬«      j                  }t        |t        «      r|› d�}| j	                  |||¬«      \  }}nmt        |t
        «      r|› d�}| j                  ||||¬«      \  }}n?t        |t        «      r|› d�}| j                  ||||¬«      \  }}nt        d|› d|› �«      ‚||||fS )	aÕ  
        Takes in the type, name and mutability corresponding to an argument, and generates a tuple of:
        (1) the C++ code necessary to unbox the argument
        (2) A Binding corresponding to the newly created unboxed variable, including variable name and its CType
        :param t: a `Type` of an argument
        :param arg_name: argument name
        :param mutable: boolean for whether this argument type is mutable
        :return: unboxed result
        )r   ÚbindsÚ_base)Úarg_nameÚout_nameÚctypeÚ_opt_out)r9   r:   Útr;   Ú	_list_outzCannot handle type z. arg_name: )
r   r&   r"   r	   Ú_gen_code_base_typer   Ú_gen_code_optional_typer
   Ú_gen_code_list_typer$   )r+   r=   r9   r   r;   r:   r3   r4   s           r   r%   z$Unboxing.argumenttype_evalue_convertP   sû   € ð ×&Ñ& q°'ÀÐ&ÓJ×OÑOˆä�aœÔ"Ø"˜ 5Ð)ˆHØ×1Ñ1Ø!¨H¸Eð 2ó ‰JˆD‘$ô ˜œ<Ô(Ø"˜ 8Ð,ˆHØ×5Ñ5Ø!¨H¸Àð 6ó ‰JˆD‘$ô ˜œ8Ô$Ø"˜ 9Ð-ˆHØ×1Ñ1Ø!¨H¸Àð 2ó ‰JˆD‘$ô Ø% a S¨°X°JÐ?óð ð ˜  dÐ*Ð*r   c           	     ó`   — |j                  «       › d|› d|› d|j                  d¬«      › d�gg fS )Nú ú = z.to<T©Ú	strip_refz>();)Úcpp_type)r+   r9   r:   r;   s       r   r?   zUnboxing._gen_code_base_types   sH   € ð �~‰~ÓÐ   ( ¨3¨x¨j¸¸U¿^¹^ÐVZ¸^Ó=[Ð<\Ð\`Ðað
àðð 	r   c                ó¨   — |› d�}| j                  |j                  |«      \  }}}}	d|› d|› d|j                  d¬«      › d�j                  d«      |	fS )	NÚ_opt_inú

    auto rD   z.toOptional<TrE   z>();
            ú
)r%   ÚelemrG   Úsplit)
r+   r9   r:   r=   r;   Úin_nameÚres_nameÚ	base_typeÚres_coder4   s
             r   r@   z Unboxing._gen_code_optional_typez   sx   € ð �J˜gÐ&ˆØ.2×.NÑ.NØ�F‰F�Gó/
Ñ+ˆ�)˜X tð
Ø
ˆ�3�x�j ¨Y×-?Ñ-?È$Ð-?Ó-OÐ,Pð Qðç‘�d“Øð	
ð 	
r   c                óÆ  — |› d�}|› d�}g }| j                  |j                  |«      \  }}	}
}t        |j                  t        «      rR|j                  j                  t
        j                  k(  r+|j                  d|› d|› d�j                  d«      «       ||fS t        |j                  t        «      ry|j                  j                  t
        j                  k(  s'|j                  j                  t
        j                  k(  r+|j                  d|› d|› d�j                  d«      «       ||fS t        |j                  t        «      rR|j                  j                  t
        j                  k(  r+|j                  d|› d|› d�j                  d«      «       ||fS t        |j                  t        «      rt|j                  j                  t
        j                  k(  rM|j                  d	|j                  › d
|› d|› d|› d|› d|› d|› d|› d|› d|› d�j                  d«      «       ||fS t        |j                  t        «      r•t        |j                  j                  t        «      rq|j                  j                  j                  t
        j                  k(  r@|j                  d|› d|› d|› d|› d|› d|› d|› d|› d|› d�j                  d«      «       ||fS |dz   }|j                  d|	j!                  d¬«      › d
|› d�«       |j                  d|› d|› dt"        j%                  |
«      › d|› d|› d |j!                  d¬«      › d!|› d"|› d#�j                  d«      «       ||fS )$NÚ_list_inÚ_elemrJ   rD   z!.toTensorList();
                rK   z.toIntList();
                z!.toDoubleList();
                z&
#ifdef USE_ATEN_LIB
std::array<bool, z> z;
auto z(.toBoolList();
size_t _i = 0;
for (auto z: z) {
    z	[_i++] = z;
}
#else
auto z&.toBoolList();
#endif
                z
#ifdef USE_ATEN_LIB
auto z@.toListOptionalTensor();
c10::List<::std::optional<at::Tensor>> z;
for (auto z.push_back(z);
}
#else
auto z0.toListOptionalTensor();
#endif
                Ú_veczstd::vector<TrE   ú;z
    for (EValue z) {
        z	
        z);
    }
    rC   ú(z);
                )r%   rL   r"   r	   r   r   ÚTensorr(   rM   ÚintÚSymIntÚfloatÚboolÚsizer   r)   rG   Ú	connectorÚjoin)r+   r9   r:   r=   r;   rN   Ú	elem_namer3   rO   Ú	res_ctyperQ   r4   Úvec_names                r   rA   zUnboxing._gen_code_list_typeˆ   s’  € ð �J˜hÐ'ˆØ�j Ð&ˆ	ØˆØ.2×.NÑ.NØ�F‰F�Ió/
Ñ+ˆ�)˜X tô �a—f‘fœhÔ'¨A¯F©F¯K©K¼6¿=¹=Ò,HØ�K‰Kð
Ø
ˆ�3�x�jð !ðç‘E˜$“KôðN �TˆzÐôE ˜Ÿ™¤Ô)Ø�F‰F�K‰Kœ6Ÿ:™:Ò%¨¯©¯©¼¿¹Ò)Eà�K‰Kð
Ø
ˆ�3�x�jð !ðç‘E˜$“Kôð~ �TˆzÐôu ˜Ÿ™¤Ô)¨a¯f©f¯k©k¼V¿\¹\Ò.IØ�K‰Kð
Ø
ˆ�3�x�jð !ðç‘E˜$“Kôðr �TˆzÐôi ˜Ÿ™¤Ô)¨a¯f©f¯k©k¼V¿[¹[Ò.Hà�K‰Kðà—&‘&�˜˜H˜:ð &Ø€Yˆc�(�ð àˆ+�R˜�yð !Ø€Jˆi˜	�{ð #ð €Zˆs�8�*ð ð÷ ‘E˜$“Kôðd �TˆzÐôC �q—v‘vœ|Ô,Ü˜1Ÿ6™6Ÿ;™;¬Ô1Ø—‘—‘× Ñ ¤F§M¡MÒ1à�K‰Kðà€Yˆc�(�ð (Ø(0 zð 2Øˆ+�R˜�yð !Ø€Jˆk˜)˜ð %ð €Zˆs�8�*ð ð
÷ ‘E˜$“Kôð: �TˆzÐð   &Ñ(ˆHà�K‰KØ˜y×1Ñ1¸DÐ1ÓAÐBÀ"ÀXÀJÈaÐPôð �K‰KðØ�˜2˜g˜Yð '	Ü	�‰˜Ó	!Ð"ð #	Ø	ˆ
�+˜h˜Zð (à
‡^�^˜d€^Ó#Ð$ A h Z¨q°°
ð ;ð÷ ‘E˜$“Kôð �TˆzÐr   N)r,   zSequence[Binding]Úreturnztuple[list[Binding], list[str]])r=   r   r9   Ústrr   r\   rc   z'tuple[str, CType, list[str], list[str]])r9   rd   r:   rd   r;   r   rc   útuple[list[str], list[str]])
r9   rd   r:   rd   r=   r   r;   r   rc   re   )
r9   rd   r:   rd   r=   r
   r;   r   rc   re   )
Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__r5   r%   r?   r@   rA   © r   r   r   r      sÖ   … ñð*ó ð'Ø%ð'à	(ó'ð* :?ñ!+Øð!+Ø!$ð!+Ø26ð!+à	0ó!+ðFØðØ'*ðØ38ðà	$óð
Øð
Ø'*ð
Ø/;ð
ØDIð
à	$ó
ðRØðRØ'*ðRØ/7ðRØ@EðRà	$ôRr   r   N)r   r   rc   rd   )Ú
__future__r   Údataclassesr   Útypingr   r   Útorchgen.modelr   r   r	   r
   r   r   r   Úcollections.abcr   Útorchgen.api.typesr   r   r   r^   r   r   rk   r   r   ú<module>rr      sX   ðÝ "å !ß *÷÷ ñ ñ Ý(ç=Ñ=ð €	ó*ñ �$Ô÷zð zó ñzr   