
    Ng#                        d dl mZmZmZmZ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mZmZ g dZd eD             Zeez   g d	z   Zd
 Z G d de          Zd Z G d de          Z G d de          Zd Zd Zd ZdS )   )Nodes	ExprNodes	FusedNodeTreeFragmentPipelineParseTreeTransformsNaming	UtilNodes)error)
PyrexTypes)CythonUtilityCode)TempitaUtilityCodeUtilityCode)	PrintTreeTreeVisitorVisitorTransform)	NPY_BYTENPY_INT8	NPY_SHORT	NPY_INT16NPY_INT	NPY_INT32NPY_LONGNPY_LONGLONG	NPY_INT64c                 :    g | ]}|                     d d          S )NPY_NPY_U)replace).0tps     R/var/www/html/ai-engine/env/lib/python3.11/site-packages/Cython/Compiler/UFuncs.py
<listcomp>r#      s&    JJJBBJJvw//JJJ    )	NPY_FLOATNPY_FLOAT32
NPY_DOUBLENPY_FLOAT64NPY_LONGDOUBLEc                 ^   |j         r7|t          j        k    rdS |t          j        k    rdS |t          j        k    rdS n[|j        rK|                                                                                    dd          }d|z  }|t          v r|S n	|j
        rdS t          | d|z             d S )	N
NPY_CFLOATNPY_CDOUBLENPY_CLONGDOUBLE  zNPY_%s
NPY_OBJECTz,Type '%s' cannot be used as a ufunc argument)
is_complexr   c_float_complex_typec_double_complex_typec_longdouble_complex_type
is_numericempty_declaration_codeupperr   numpy_numeric_typesis_pyobjectr   )postype_postfixtypenames       r"   _get_type_constantr>   +   s     J333<j666 =j:::$$ ;		 ..006688@@bIIg%***O +		 | 
#=EFFFFFr$   c                   (    e Zd ZdZdZd Zd Zd ZdS )_FindCFuncDefNodezf
    Finds the CFuncDefNode in the tree

    The assumption is that there's only one CFuncDefNode
    Nc                 B    | j         rd S |                     |           d S N)
found_nodevisitchildrenselfnodes     r"   
visit_Nodez_FindCFuncDefNode.visit_NodeI   s+    ? 	%Ft$$$$$r$   c                     || _         d S rB   )rC   rE   s     r"   visit_CFuncDefNodez$_FindCFuncDefNode.visit_CFuncDefNodeO   s    r$   c                 :    |                      |           | j        S rB   )visitrC   )rF   trees     r"   __call__z_FindCFuncDefNode.__call__R   s    

4r$   )__name__
__module____qualname____doc__rC   rH   rJ   rN    r$   r"   r@   r@   @   sR          J% % %      r$   r@   c                 0     t                      |           S rB   )r@   )rM   s    r"   get_cfunc_from_treerU   W   s    t$$$r$   c                       e Zd ZdZd ZdS )_ArgumentInfoz
    Everything related to defining an input/output argument for a ufunc

    type  - PyrexType
    type_constant  - str such as "NPY_INT8" representing numpy dtype constants
    c                 "    || _         || _        d S rB   )typetype_constant)rF   rY   rZ   s      r"   __init__z_ArgumentInfo.__init__c   s    	*r$   N)rO   rP   rQ   rR   r[   rS   r$   r"   rW   rW   [   s-         + + + + +r$   rW   c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )UFuncConversionc                     || _         |j                                        | _        |                                 | _        |                                 | _        d S rB   )rG   local_scopeglobal_scopeget_in_type_infoin_definitionsget_out_type_infoout_definitionsrE   s     r"   r[   zUFuncConversion.__init__i   sN    	 ,99;;"3355#5577r$   c                     g }t          | j        j                  D ]L\  }}t          | j        j        |j                  }|                    t          |j        |                     M|S rB   )	enumeraterG   argsr>   r:   rY   appendrW   )rF   definitionsnarg
type_consts        r"   ra   z UFuncConversion.get_in_type_infop   sf    	// 	D 	DFAs+DIM38DDJ}SXzBBCCCCr$   c           
      
   | j         j        j        r| j         j        j        }n| j         j        g}g }t	          |          D ]@\  }}|                    t          |t          | j         j        |                               A|S rB   )	rG   return_type	is_ctuple
componentsrf   rh   rW   r>   r:   )rF   rp   ri   rj   rY   s        r"   rc   z!UFuncConversion.get_out_type_infow   s    9 * 	1.9JJ)/0J ,, 	 	GAtd$6ty}d$K$KLL    r$   c           	      l   d | j         D             }d | j        D             }| j        j        j                            | j        j        j        d          }d| j        j        _        | j        	                    | j        j        j
        dz             }t          d |D                       pt          d |D                        }t          |||| j        j        j        || j        j        j        j        |          }t          j        d	d
|| j                  }|                    d          }|S )Nc                     g | ]	}|j         
S rS   rY   r    as     r"   r#   z<UFuncConversion.generate_cy_utility_code.<locals>.<listcomp>   s    999QV999r$   c                     g | ]	}|j         
S rS   rs   rt   s     r"   r#   z<UFuncConversion.generate_cy_utility_code.<locals>.<listcomp>   s    :::QV:::r$   T)pyrex
_ufunc_defc              3   $   K   | ]}|j         V  d S rB   r9   r    ts     r"   	<genexpr>z;UFuncConversion.generate_cy_utility_code.<locals>.<genexpr>   s$      -O-Oam-O-O-O-O-O-Or$   c              3   $   K   | ]}|j         V  d S rB   rz   r{   s     r"   r}   z;UFuncConversion.generate_cy_utility_code.<locals>.<genexpr>   s$      11!111111r$   )
func_cnamein_types	out_typesinline_func_callinline_func_declarationnogilwill_be_called_without_gilUFuncDefinitionz
UFuncs.pyx)contextouter_module_scope)entries_only)rb   rd   rG   entryrY   declaration_codecnameusedr`   next_idnameanydictr   r   loadget_tree)	rF   	arg_typesr   inline_func_declufunc_cnamer   r   coderM   s	            r"   generate_cy_utility_codez(UFuncConversion.generate_cy_utility_code   sL   99T%8999	::T%9:::	9?/@@IO! A 
 
  $	'//	0D|0STT*--O-OY-O-O-O*O*O +211y11111&3" "!Y_2$4)/&,'A
 
 
 !%#0	
 
 
 }}$}//r$   c                     | j                             t          j        dd                     | j                             t          j        dd                     d S )N
UFuncsInit
UFuncs_C.cNumpyImportUFunczNumpyImportArray.c)r`   use_utility_coder   load_cached)rF   s    r"   use_generic_utility_codez(UFuncConversion.use_generic_utility_code   sf    **#L,??	
 	
 	
 	**#$68LMM	
 	
 	
 	
 	
r$   N)rO   rP   rQ   r[   ra   rc   r   r   rS   r$   r"   r]   r]   h   s`        8 8 8  
 
 
  B
 
 
 
 
r$   r]   c                 v   t          | t          j                  r;| j        j        j        rt          | j        d           | S t          |           g}| }nt          | t          j
                  ret          | j        t          j                  rF| j        j        j        j        rt          | j        d           | S d | j        D             }| j        }nt          | j        d           | S |sd S |d         j        j        |j        j        = |d                                          | gt%          ||          z   S )Nz0Methods cannot currently be converted to a ufuncc                 ,    g | ]}t          |          S rS   )r]   )r    rj   s     r"   r#   z$convert_to_ufunc.<locals>.<listcomp>   s     ===Qoa((===r$   z,Only C functions can be converted to a ufunc    )
isinstancer   CFuncDefNoder_   parent_scopeis_c_class_scoper   r:   r]   r   FusedCFuncDefNoderG   nodesr`   entriesr   r   r   _generate_stats_from_converters)rG   
convertersoriginal_nodes      r"   convert_to_ufuncr      s=   $*++ (9 	$(NOOOK%d++,
	D)5	6	6 
:	5%< < 
 9 -> 	$(NOOOK==$*===
	dhFGGG 1"*=+>+CDqM**,,,63JNNNNr$   c                    | d         j         }|                    t          j        dz             }|                    t          j        dz             }|                    t          j        dz             }g }d }d }	| D ]}
d |
j        D             }||t          |          k    sJ nt          |          }|                    |           d |
j        D             }|	|	t          |          k    sJ nt          |          }	|                    |           d |D             }t          |||||          }|	                    t          j        d	d
|                     |j        }|j        j        }|j        }|d|d|dt          |          d|d|	d|d|r|                                ndd}t#          j        |dt'          j        t&          j        t'          j        dt&          j        d           g          t#          j        |t&          j        |          g          }|                    |t&          j        |          }t5          j        |t#          j        ||t&          j        |          |          }|S )Nr   funcstypesdatac                     g | ]	}|j         
S rS   rZ   r    ds     r"   r#   z1generate_ufunc_initialization.<locals>.<listcomp>   s    >>>AO>>>r$   c                     g | ]	}|j         
S rS   r   r   s     r"   r#   z1generate_ufunc_initialization.<locals>.<listcomp>   s    @@@Q_@@@r$   c                 &    g | ]}|j         j        S rS   )r   r   )r    cfnodes     r"   r#   z1generate_ufunc_initialization.<locals>.<listcomp>   s    @@@&6<%@@@r$   )ufunc_funcs_namefunc_cnamesufunc_types_nametype_constantsufunc_data_nameUFuncConstsr   )r   z(), z, z, PyUFunc_None, "z", NULLz, 0PyUFunc_FromFuncAndDatadummy)rY   value)function_name	func_typerg   )r   rY   r   )lhsrhs)r`   r   r	   pyrex_prefixrb   lenextendrd   r   r   r   r   r:   r   r   docas_c_string_literalr   PythonCapiCallNoder   	CFuncTypepy_object_typeCFuncTypeArgc_void_ptr_type	ConstNodedeclare_varr   SingleAssignmentNodeNameNode)r   cfunc_nodesr   r`   r   r   r   r   narg_innarg_outcin_const	out_constr   r   r:   	func_namedocstrargs_to_func	call_node	lhs_entry
assgn_nodes                         r"   generate_ufunc_initializationr      s   a=-L#++F,?',IJJ#++F,?',IJJ"**6+>+GHHONGH ) )>>Q-=>>>c(mm+++++(mmGh'''@@a.?@@@	s9~~-----9~~Hi((((@@K@@@K))%'  G !!|WMMM   
C#(IFK		(.:""$$$F::	L ,/&%$Wj.H$OOP
 

 *4L  
  I ((J4MsSSI+ij&?y
 
 
   J r$   c                    g }| D ]c}|                                 }t          |          }|j        j                            |j        j                   |                    |           d|                    t          | ||                     |S rB   )r   rU   r`   utility_code_listr   scoperh   r   )r   rG   stats	converterrM   
ufunc_nodes         r"   r   r     s    E ! !	1133(..
077
8TUUUZ    	LL.z5$GGHHHLr$   N) r/   r   r   r   r   r   r   r	   r
   Errorsr   r   r   r   Coder   Visitorr   r   r   numpy_int_typesnumpy_uint_typesr8   r>   r@   rU   objectrW   r]   r   r   r   rS   r$   r"   <module>r      s  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	             * * * * * * 1 1 1 1 1 1 1 1 = = = = = = = = = =
 
 
 KJ/JJJ     G G G*       .% % %
+ 
+ 
+ 
+ 
+F 
+ 
+ 
+C
 C
 C
 C
 C
f C
 C
 C
LO O O8G G GT
 
 
 
 
r$   