Ë
    Ç[;j±+  ã                   ó¾   — d dl mZmZmZmZ d dlmZ d dl mZ d dlm	Z	 d dl
mZmZ d dlmZ d dl mZ  G d„ d	e«      Zd
„ Z G d„ d«      Z G d„ d«      Zd„ Zd„ Zd„ Zy)é   )ÚNodesÚ	ExprNodesÚ	FusedNodeÚNaming)Úerror)Ú
PyrexTypes)ÚCythonUtilityCode)ÚTempitaUtilityCodeÚUtilityCode)ÚTreeVisitor)ÚSymtabc                   ó&   — e Zd ZdZdZd„ Zd„ Zd„ Zy)Ú_FindCFuncDefNodezf
    Finds the CFuncDefNode in the tree

    The assumption is that there's only one CFuncDefNode
    Nc                 ó@   — | j                   ry | j                  |«       y ©N)Ú
found_nodeÚvisitchildren©ÚselfÚnodes     ú_G:\00. PROJECTS\API\Inventory\templateJSON\kerjaOCR\Lib\site-packages\Cython/Compiler/UFuncs.pyÚ
visit_Nodez_FindCFuncDefNode.visit_Node   s   € Ø�?Š?Øà×Ñ˜tÕ$ó    c                 ó   — || _         y r   )r   r   s     r   Úvisit_CFuncDefNodez$_FindCFuncDefNode.visit_CFuncDefNode   s	   € Øˆ�r   c                 ó<   — | j                  |«       | j                  S r   )Úvisitr   )r   Útrees     r   Ú__call__z_FindCFuncDefNode.__call__!   s   € Ø�
‰
�4ÔØ�‰Ðr   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   © r   r   r   r      s   „ ñð €Jò%òór   r   c                 ó"   —  t        «       | «      S r   )r   )r   s    r   Úget_cfunc_from_treer&   &   s   € ØÔÓ˜tÓ$Ð$r   c                   ó   — e Zd ZdZd„ Zy)Ú_ArgumentInfoa/  
    Everything related to defining an input/output argument for a ufunc

    type  - PyrexType
    type_constant  - str such as "NPY_INT8" representing numpy dtype constants
    injected_typename - str representing a name that can be used to look up the type
                        in Cython code
    c                 ó.   — || _         || _        || _        y r   )ÚtypeÚtype_constantÚinjected_typename)r   r*   r+   r,   s       r   Ú__init__z_ArgumentInfo.__init__4   s   € ØˆŒ	Ø*ˆÔØ!2ˆÕr   N)r    r!   r"   r#   r-   r$   r   r   r(   r(   *   s   „ ñó3r   r(   c                   ó6   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	y)	ÚUFuncConversionc                 óÐ  — || _         |j                  j                  «       | _        d| _        | j                   j                  j
                  j                  | j                  «      rO| xj                  dz  c_        | j                   j                  j
                  j                  | j                  «      rŒOg | _        | j                  «       | _	        | j                  «       | _        y )NÚufunc_typenameÚ_)r   Úlocal_scopeÚglobal_scoper,   ÚentryÚcnameÚ
startswithÚinjected_typesÚget_in_type_infoÚin_definitionsÚget_out_type_infoÚout_definitionsr   s     r   r-   zUFuncConversion.__init__;   s©   € ØˆŒ	Ø ×,Ñ,×9Ñ9Ó;ˆÔà!1ˆÔØ�i‰i�o‰o×#Ñ#×.Ñ.¨t×/EÑ/EÔFØ×"Ò" cÑ)Õ"ð �i‰i�o‰o×#Ñ#×.Ñ.¨t×/EÑ/EÕFà ˆÔØ"×3Ñ3Ó5ˆÔØ#×5Ñ5Ó7ˆÕr   c                 ó
  — |j                  «       }|j                  «       j                  dd«      j                  dd«      }t        |||¬«      }| j                  j                  t        j                  dd|¬«      «       d|› �S )	Nr2   Ú__Ú )Útype_substituted_cnameÚ
macro_nameÚ
type_cnameÚUFuncTypedefú
UFuncs_C.c©ÚcontextÚ__Pyx_typedef_ufunc_)Úempty_declaration_codeÚstripÚreplaceÚdictr4   Úuse_utility_coder
   Úload)r   Útype_rA   ÚdeclÚsubstituted_cnamerF   s         r   Ú_handle_typedef_type_constantz-UFuncConversion._handle_typedef_type_constantF   s‡   € Ø×+Ñ+Ó-ˆØ ŸJ™J›L×0Ñ0°°dÓ;×CÑCÀCÈÓMÐÜØ#4Ø!Øô
ˆð
 	×Ñ×*Ñ*Ü×#Ñ#ØØØôô	ð &Ð&7Ð%8Ð9Ð9r   c                 ó  — |}|j                   r|j                  }t        j                  |«      }|t        j                  u rt        |d|z  «       y |j                  r| j                  |d«      S |j                  rWd}|j                  t        j                  k(  rd}n|j                  t        j                  k(  rd}| j                  |d|› d�«      S |j                  r| j                  |d«      S |j                  ry	t        |d|z  «       y )
Nz,Type '%s' cannot be used as a ufunc argumentÚ__PYX_GET_NPY_COMPLEX_TYPEÚ ÚSÚUÚ__PYX_GET_NPY_ÚINT_TYPEÚ__PYX_GET_NPY_FLOAT_TYPEÚ
NPY_OBJECT)Ú
is_typedefÚtypedef_base_typer   Úremove_cv_refÚc_bint_typer   Ú
is_complexrQ   Úis_intÚsignedÚSIGNEDÚUNSIGNEDÚis_floatÚis_pyobject)r   ÚposrN   Ú	base_typera   s        r   Ú_get_type_constantz"UFuncConversion._get_type_constantV   s  € Øˆ	Ø×ÒØ!×3Ñ3ˆIÜ×,Ñ,¨YÓ7ˆ	Øœ
×.Ñ.Ñ.ä�#ÐEÈÑMÔNØØ×ÒØ×5Ñ5ØØ0ó2ð 2ð �\Š\ØˆFØ�|‰|œz×0Ñ0Ò0Ø‘Ø—‘¤×!4Ñ!4Ò4Ø�Ø×5Ñ5ØØ   ¨Ð1ó3ð 3ð �^Š^Ø×5Ñ5ØØ*ó,ð ,ð ×ÒØô 	ˆcÐAÀEÑIÕJr   c                 ó\  — g }t        | j                  j                  «      D ]‡  \  }}| j                  › d|› �}| j                  j                  |«       | j                  | j                  j                  |j                  «      }|j                  t        |j                  ||«      «       Œ‰ |S )NÚ_in_)
Ú	enumerater   Úargsr,   r8   Úappendrh   rf   r*   r(   )r   ÚdefinitionsÚnÚargr,   Ú
type_consts         r   r9   z UFuncConversion.get_in_type_infov   s‘   € ØˆÜ §	¡	§¡Ö/‰FˆAˆsØ#'×#9Ñ#9Ð":¸$¸q¸cÐ BÐØ×Ñ×&Ñ&Ð'8Ô9Ø×0Ñ0°·±·±ÀÇÁÓIˆJØ×Ñœ}¨S¯X©X°zÐCTÓUÕVð	 0ð
 Ðr   c                 ó¼  — | j                   j                  j                  r!| j                   j                  j                  }n| j                   j                  g}g }t	        |«      D ]s  \  }}| j
                  › d|› �}| j                  j                  |«       | j                  | j                   j                  |«      }|j                  t        |||«      «       Œu |S )NÚ_out_)r   Úreturn_typeÚ	is_ctupleÚ
componentsrk   r,   r8   rm   rh   rf   r(   )r   rv   rn   ro   r*   r,   rq   s          r   r;   z!UFuncConversion.get_out_type_info   s¾   € Ø�9‰9× Ñ ×*Ò*ØŸ™×.Ñ.×9Ñ9‰JàŸ)™)×/Ñ/Ð0ˆJØˆÜ  Ö,‰GˆAˆtØ#'×#9Ñ#9Ð":¸%À¸sÐ CÐØ×Ñ×&Ñ&Ð'8Ô9Ø×0Ñ0°·±·±ÀÓEˆJØ×ÑÜ˜d JÐ0AÓBõð	 -ð Ðr   c           
      óR  — | j                   D �cg c]  }|j                  |j                  f‘Œ }}| j                  D �cg c]  }|j                  |j                  f‘Œ }}t	        ||z   «      }d| j
                  j                  _        | j                  j                  | j
                  j                  j                  dz   «      }t        d„ |D «       «      xs t        d„ |D «       «       }t	        d|||| j
                  j                  j                  | j
                  j                  j                  j                  |dœ|¤Ž}t        j                  dd | j                  j                   «      }|j#                  | j
                  j                  j                  | j
                  j                  j                  | j
                  j                  j                  | j
                  j$                  d¬«       t'        j(                  d	d
||¬«      }	|	j+                  d¬«      }
|
S c c}w c c}w )NTÚ
_ufunc_defc              3   ó:   K  — | ]  \  }}|j                   –— Œ y ­wr   ©re   ©Ú.0r2   Úts      r   Ú	<genexpr>z;UFuncConversion.generate_cy_utility_code.<locals>.<genexpr>–   s   è ø€ Ð-RÉ	ÁÀÀ1¨a¯m­mÉ	ùó   ‚c              3   ó:   K  — | ]  \  }}|j                   –— Œ y ­wr   rz   r{   s      r   r~   z;UFuncConversion.generate_cy_utility_code.<locals>.<genexpr>—   s   è ø€ Ð4©)¡$ ! Q�—•©)ùr   )Ú
func_cnameÚin_typesÚ	out_typesÚinline_func_callÚnogilÚwill_be_called_without_gilÚufunc_moduleÚextern)Únamer6   r*   rf   Ú
visibilityÚUFuncDefinitionz
UFuncs.pyx)rF   Ú
from_scope)Úentries_onlyr$   )r:   r,   r*   r<   rK   r   r5   Úusedr4   Únext_idr‰   Úanyr6   r…   r   ÚModuleScoperF   Údeclare_cfunctionrf   r	   rM   Úget_tree)r   ÚaÚ	arg_typesrƒ   Úcontext_typesÚufunc_cnamer†   rF   Úufunc_global_scopeÚcoder   s              r   Úgenerate_cy_utility_codez(UFuncConversion.generate_cy_utility_codeŽ   sÓ  € Ø<@×<OÒ<OÓPÑ<O°q�a×)Ñ)¨1¯6©6Ò2Ð<Oˆ	ÐPØ<@×<PÒ<PÓQÑ<P°q�a×)Ñ)¨1¯6©6Ò2Ð<Pˆ	ÐQÜ˜Y¨Ñ2Ó3ˆØ#ˆ�	‰	�‰Ôà×'Ñ'×/Ñ/°·	±	·±×0DÑ0DÀ|Ñ0SÓTˆä*-Ñ-RÉ	Ó-RÓ*Rò +5ÜÑ4©)Ó4Ó4ð&6Ð"ô ð 
Ø"ØØØ!ŸY™YŸ_™_×2Ñ2Ø—)‘)—/‘/×&Ñ&×,Ñ,Ø'Añ
ð ñ
ˆô $×/Ñ/Ø˜D $×"3Ñ"3×";Ñ";ó
Ðð 	×,Ñ,Ø—‘—‘×&Ñ&Ø—)‘)—/‘/×'Ñ'Ø—‘—‘×%Ñ%Ø—	‘	—‘Øð 	-ô 	
ô !×%Ñ%ØØØØ+ô	
ˆð �}‰}¨$ˆ}Ó/ˆØˆùòQ QùÚQs
   �H¾H$c                 ó  — | j                   j                  t        j                  dd«      «       | j                   j                  t        j                  dd«      «       | j                   j                  t        j                  dd«      «       y )NÚ
UFuncsInitrD   ÚUFuncTypeHandlingÚNumpyImportUFunczNumpyImportArray.c)r4   rL   r   Úload_cached)r   s    r   Úuse_generic_utility_codez(UFuncConversion.use_generic_utility_code¹   su   € à×Ñ×*Ñ*Ü×#Ñ# L°,Ó?ô	
ð 	×Ñ×*Ñ*Ü×#Ñ#Ð$7¸ÓFô	
ð 	×Ñ×*Ñ*Ü×#Ñ#Ð$6Ð8LÓMõ	
r   N)
r    r!   r"   r-   rQ   rh   r9   r;   rš   r    r$   r   r   r/   r/   :   s(   „ ò	8ò:ò Kò@òò)óV

r   r/   c                 ó  — t        | t        j                  «      rG| j                  j                  j
                  rt        | j                  d«       | S t        | «      g}| }nÇt        | t        j                  «      r•t        | j                  t        j                  «      rq| j                  j                  j                  j
                  rt        | j                  d«       | S | j                  D �cg c]  }t        |«      ‘Œ }}| j                  }nt        | j                  d«       | S |sy |d   j                  j                  |j                  j                   = |d   j#                  «        | gt%        ||«      z   S c c}w )Nz0Methods cannot currently be converted to a ufuncz,Only C functions can be converted to a ufuncé    )Ú
isinstancer   ÚCFuncDefNoder3   Úparent_scopeÚis_c_class_scoper   rf   r/   r   ÚFusedCFuncDefNoder   Únodesr4   Úentriesr5   r‰   r    Ú_generate_stats_from_converters)r   Ú
convertersÚoriginal_nodero   s       r   Úconvert_to_ufuncr­   Æ   s0  € Ü�$œ×*Ñ*Ô+Ø×Ñ×(Ñ(×9Ò9Ü�$—(‘(ÐNÔOØˆKÜ% dÓ+Ð,ˆ
Ø‰Ü	�Dœ)×5Ñ5Ô	6¼:Ø�	‰	”5×%Ñ%ô<ð �9‰9× Ñ ×-Ñ-×>Ò>Ü�$—(‘(ÐNÔOØˆKØ26·*²*Ó=±*¨Q”o aÕ(°*ˆ
Ð=ØŸ	™	‰äˆd�h‰hÐFÔGØˆáØà�1‰×"Ñ"×*Ñ*¨=×+>Ñ+>×+CÑ+CÐDàˆq�M×*Ñ*Ô,Øˆ6Ô3°JÀÓNÑNÐNùò >s   Ã0E=c                 óª  — | d   j                   }|j                  t        j                  dz   «      }|j                  t        j                  dz   «      }|j                  t        j                  dz   «      }g }d }d }	| D ]¤  }
|
j                  D �cg c]  }|j
                  ‘Œ }}|�|t        |«      k(  sJ ‚t        |«      }|j                  |«       |
j                  D �cg c]  }|j
                  ‘Œ }}|	�|	t        |«      k(  sJ ‚t        |«      }	|j                  |«       Œ¦ |D �cg c]  }|j                  j                  ‘Œ }}t        |||||¬«      }|j                  t        j                  dd|¬«      «       |j                  }|j                  j                   }|j"                  }|›d	|›d
|›d	t        |«      ›d
|›d
|	›d|›d|r|j%                  «       nd›d�}t'        j(                  |dt+        j,                  t*        j.                  t+        j0                  dt*        j2                  d «      g«      t'        j4                  |t*        j2                  |¬«      g¬«      }|j7                  |t*        j.                  |«      }t9        j:                  |t'        j<                  ||t*        j.                  |¬«      |¬«      }|S c c}w c c}w c c}w )Nr¢   ÚfuncsÚtypesÚdata)Úufunc_funcs_nameÚfunc_cnamesÚufunc_types_nameÚtype_constantsÚufunc_data_nameÚUFuncConstsrD   rE   z(), z, z, PyUFunc_None, "z", ÚNULLz, 0ÚPyUFunc_FromFuncAndDataÚdummy)r*   Úvalue)Úfunction_nameÚ	func_typerl   )r‰   r*   r5   )ÚlhsÚrhs)r4   r�   r   Úpyrex_prefixr:   r+   ÚlenÚextendr<   r5   r6   rK   rL   r
   rM   rf   r‰   ÚdocÚas_c_string_literalr   ÚPythonCapiCallNoder   Ú	CFuncTypeÚpy_object_typeÚCFuncTypeArgÚc_void_ptr_typeÚ	ConstNodeÚdeclare_varr   ÚSingleAssignmentNodeÚNameNode)r«   Úcfunc_nodesr¬   r4   r²   r´   r¶   rµ   Únarg_inÚnarg_outÚcÚdÚin_constÚ	out_constÚcfnoder³   rF   rf   Ú	func_nameÚdocstrÚargs_to_funcÚ	call_nodeÚ	lhs_entryÚ
assgn_nodes                           r   Úgenerate_ufunc_initializationrÜ   â   s­  € Ø˜a‘=×-Ñ-€LØ#×+Ñ+¬F×,?Ñ,?À'Ñ,IÓJÐØ#×+Ñ+¬F×,?Ñ,?À'Ñ,IÓJÐØ"×*Ñ*¬6×+>Ñ+>ÀÑ+GÓH€OØ€NØ€GØ€HÛˆØ-.×-=Ò-=Ó>Ñ-=¨�A—O“OÐ-=ˆÐ>ØÐØœc (›mÒ+Ð+Ð+ä˜(“mˆGØ×Ñ˜hÔ'Ø./×.?Ò.?Ó@Ñ.?¨�Q—_“_Ð.?ˆ	Ð@ØÐØœs 9›~Ò-Ð-Ð-ä˜9“~ˆHØ×Ñ˜iÕ(ð ñ 5@Ó@±K¨&�6—<‘<×%Ó%°K€KÐ@äØ)ØØ)Ø%Ø'ô€Gð ×!Ñ!Ü×Ñ ¨|ÀWÔMôð ×
Ñ
€CØ×#Ñ#×(Ñ(€IØ×Ñ€Fò 	ÚÚÜˆKÕÚÚÚÙ(.ˆ×"Ñ"Ô$°FÑ:ð	€Lô ×,Ñ,ØØ/ä×&Ñ&Ü×%Ñ%Ü×$Ñ$ W¬j×.HÑ.HÈ$ÓOÐPó
ô
 ×ÑØœ*×4Ñ4¸Lôð
ô€Ið ×(Ñ(¨´J×4MÑ4MÈsÓS€IÜ×+Ñ+ØÜ×ÑØ�i¤j×&?Ñ&?Àyô
ð ô€Jð Ðùò ?ùò Aùò As   ÂKÃ KÄ)Kc                 ó  — g }| D ]g  }|j                  «       }t        |«      }|j                  j                  j	                  |j
                  j                  «       |j                  |«       Œi |j                  t        | ||«      «       |S r   )rš   r&   r4   Úutility_code_listrÂ   Úscoperm   rÜ   )r«   r   ÚstatsÚ	converterr   Ú
ufunc_nodes         r   rª   rª   -  sv   € Ø€EÛˆ	Ø×1Ñ1Ó3ˆÜ(¨Ó.ˆ
à×Ñ×0Ñ0×7Ñ7¸¿
¹
×8TÑ8TÔUØ�‰�ZÕ ð  ð 
‡L�LÔ.¨z¸5À$ÓGÔHØ€Lr   N)rT   r   r   r   r   ÚErrorsr   r   r   r	   ÚCoder
   ÚVisitorr   r   r   r&   r(   r/   r­   rÜ   rª   r$   r   r   Ú<module>ræ      s]   ð÷ó õ Ý Ý *ß 1Ý  Ý ô˜ô ò.%÷3ñ 3÷ I
ñ I
òXOò8HóV
r   