
    Ng0                     r   d dl mZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZm	Z	  G d d	e
          Z G d
 de          Z G d de          Z G d de          Z G d d          Z G d dej        e          ZeZ G d dej        e          Z G d dej                  Z G d de          ZdS )    )absolute_import   )Nodes)	ExprNodes)Node)AtomicExprNode)
c_ptr_typec_bint_typec                   $    e Zd ZdZdZddZd ZdS )
TempHandleNFc                 B    || _         ||j        | _        d S || _        d S N)typeis_pyobjectneeds_cleanup)selfr   r   s      U/var/www/html/ai-engine/env/lib/python3.11/site-packages/Cython/Compiler/UtilNodes.py__init__zTempHandle.__init__   s.    	 !%!1D!.D    c                 0    t          || | j                  S )N)handler   )TempRefNoder   )r   poss     r   refzTempHandle.ref   s    3t$)<<<<r   r   )__name__
__module____qualname__tempneeds_xdecrefr   r    r   r   r   r      sA        DM/ / / /= = = = =r   r   c                   4    e Zd Zd Zd Zd Zd Zd Zd	dZdS )
r   c                 4    | j         | j        j         k    sJ | S r   r   r   r   envs     r   analyse_typeszTempRefNode.analyse_types#       yDK,,,,,r   c                 4    | j         | j        j         k    sJ | S r   r#   r$   s     r   analyse_target_typesz TempRefNode.analyse_target_types'   r'   r   c                     d S r   r    r$   s     r   analyse_target_declarationz&TempRefNode.analyse_target_declaration+       r   c                 &    | j         j        }|d}|S )Nz<error>)r   r   )r   results     r   calculate_result_codez!TempRefNode.calculate_result_code.   s    !>I6r   c                     d S r   r    r   codes     r   generate_result_codez TempRefNode.generate_result_code3   r,   r   Fc                    | j         j        rO|                    |           |                    |                                 |                                            |                    |                                 d|r|                                n&|                    |                                           d           |                    |           |	                    |           d S N = ;)
r   r   make_owned_referenceput_xdecrefr.   ctypeputln	result_asgenerate_post_assignment_code
free_tempsr   rhsr2   overloaded_assignments       r   generate_assignment_codez$TempRefNode.generate_assignment_code6   s    9  	:$$T***T[[]]DJJLL999

KKMMMM1RCJJLLLs}}TZZ\\7R7RRR
 	 	 	 	))$///tr   NF)	r   r   r   r&   r)   r+   r/   r3   rB   r    r   r   r   r      ss                
  
 
 
 
 
 
r   r   c                   6    e Zd ZdZdgZd Zd Zd Zd Zd Z	dS )	TempsBlockNodea_  
    Creates a block which allocates temporary variables.
    This is used by transforms to output constructs that need
    to make use of a temporary variable. Simply pass the types
    of the needed temporaries to the constructor.

    The variables can be referred to using a TempRefNode
    (which can be constructed by calling get_ref_node).
    bodyc                    | j         D ]-}|j                            |j        |j                  |_        .| j                            |           | j         D ]p}|j        rH|j        r!|	                    |j        |j                   n |
                    |j        |j                   |j                            |j                   qd S )N
manage_ref)temps	funcstateallocate_tempr   r   r   rF   generate_execution_coder   put_xdecref_clearput_decref_clearrelease_temp)r   r2   r   s      r   rM   z&TempsBlockNode.generate_execution_codeU   s    j 	> 	>F.66(< 7 > >FKK	))$///j 	5 	5F# D' D**6;DDDD))&+v{CCCN''4444	5 	5r   c                 :    | j                             |           d S r   rF   analyse_declarationsr$   s     r   rS   z#TempsBlockNode.analyse_declarationsb       	&&s+++++r   c                 D    | j                             |          | _         | S r   rF   analyse_expressionsr$   s     r   rW   z"TempsBlockNode.analyse_expressionse       I11#66	r   c                 <    | j                             ||           d S r   rF   generate_function_definitionsr   r%   r2   s      r   r[   z,TempsBlockNode.generate_function_definitionsi        	//T:::::r   c                 :    | j                             |           d S r   )rF   annotater1   s     r   r_   zTempsBlockNode.annotatel   s    	4     r   N)
r   r   r   __doc__child_attrsrM   rS   rW   r[   r_   r    r   r   rE   rE   C   sr          (K5 5 5, , ,  ; ; ;! ! ! ! !r   rE   c                       e Zd Zg ZdZddZd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd ZddZd Zd Zd ZdS )ResultRefNodeFNTc                     || _         d | _        || _        |"|j        | _        t          |dd           | _        ||| _        ||| _        |rd| _        | j        J d S )Nr   T)
expressionr   may_hold_nonegetattrr   is_temp)r   re   r   r   rf   rh   s         r   r   zResultRefNode.__init__w   sv    $*!!~DH
FD99DI?DHDI 	 DLx#####r   c                     | S r   r    r   s    r   
clone_nodezResultRefNode.clone_node   s    r   c                 H    | j         r| j                             |          S dS )Nr    )re   type_dependenciesr$   s     r   rm   zResultRefNode.type_dependencies   s'    ? 	?44S9992r   c                 L    || _         t          |dd           }|r	|| _        d S d S )Nr   )re   rg   r   )r   re   r   s      r   update_expressionzResultRefNode.update_expression   s7    $z6400 	DIII	 	r   c                     d S r   r    r$   s     r   r+   z(ResultRefNode.analyse_target_declaration   r,   r   c                     | j         <| j         j        s| j                             |          | _         | j         j        | _        | S r   )re   r   r&   r$   s     r   r&   zResultRefNode.analyse_types   s@    ?&?' E"&/"?"?"D"D,DIr   c                     | j         | j         S | j        2| j        j         | j        j         S | j                            |          S J d            )NFz"cannot infer type of ResultRefNode)r   re   
infer_typer$   s     r   rs   zResultRefNode.infer_type   sU    9 9?&#/++?--c222:::::r   c                 ,    | j         j        sdS | j        S )NF)r   r   rf   rj   s    r   may_be_nonezResultRefNode.may_be_none   s    y$ 	5!!r   c                 l    | j         | j                                         S | j        | j        j        S dS NT)re   ru   r   r   rj   s    r   _DISABLED_may_be_nonez#ResultRefNode._DISABLED_may_be_none   s8     ?&?..0009 9((tr   c                     dS rw   r    rj   s    r   	is_simplezResultRefNode.is_simple   s    tr   c                     	 | j         S # t          $ r( | j        | j                                        | _         Y nw xY w| j         S r   )result_codeAttributeErrorre   r.   rj   s    r   r.   zResultRefNode.result   sV    	<## 	< 	< 	<*#'?#9#9#;#; 	< s   	 /;;c                     d S r   r    r1   s     r   generate_evaluation_codez&ResultRefNode.generate_evaluation_code   r,   r   c                     d S r   r    r1   s     r   r3   z"ResultRefNode.generate_result_code   r,   r   c                     d S r   r    r1   s     r   generate_disposal_codez$ResultRefNode.generate_disposal_code   r,   r   c                    | j         j        rV|                    |           | j        s:|                    |                                 |                                            |                    |                                 d|r|                                n&|                    |                                           d           |	                    |           |
                    |           d S r5   )r   r   r8   lhs_of_first_assignment
put_decrefr.   r:   r;   r<   r=   r>   r?   s       r   rB   z&ResultRefNode.generate_assignment_code   s    9  	=$$T***/ =tzz||<<<

KKMMMM1RCJJLLLs}}TZZ\\7R7RRR
 	 	 	 	))$///tr   c                     d S r   r    r$   s     r   allocate_tempszResultRefNode.allocate_temps   r,   r   c                     d S r   r    r$   s     r   rP   zResultRefNode.release_temp   r,   r   c                     d S r   r    r1   s     r   r>   zResultRefNode.free_temps   r,   r   )NNNTFrC   )r   r   r   subexprsr   r   rk   rm   ro   r+   r&   rs   ru   rx   rz   r.   r   r3   r   rB   r   rP   r>   r    r   r   rc   rc   p   s9        H#$ $ $ $          ; ; ;" " "
               
 
 
 
        r   rc   c                        e Zd Zd Zd Zd ZdS )LetNodeMixinc                 ,    || _         |j        | _        d S r   )	lazy_tempre   temp_expression)r   r   s     r   set_temp_exprzLetNodeMixin.set_temp_expr   s    "(3r   c                    | j                             |           | j         j        | _        | j        j        rt          | j        j                  | _        | j                                         | _        | j        r| j         	                                | _
        n| j        j        r| j                             |           n| j                             |           |j                            | j        d          | _
        |                    | j
        d| j         	                                d           | j                             |           | j                             |           | j
        | j        _        d S )NTrH   r6   r7   )r   r   r   	temp_typeis_arrayr	   	base_typeresult_in_temp_result_in_tempr.   r   is_memoryviewslicemake_owned_memoryviewslicer8   rK   rL   r;   r   r>   r   r|   r1   s     r   setup_temp_exprzLetNodeMixin.setup_temp_expr   sX   55d;;;-2>" 	B'(@AADN#3BBDD 	2,3355DII~0 @$??EEEE$99$???444 5 1 1DIJJTYYY0D0K0K0M0M0M0MNOOO 77=== ++D111%)Y"""r   c                    | j         r6| j                            |           | j                            |           d S | j        j        r |                    | j        | j                   |j        	                    | j                   d S r   )
r   r   r   r>   r   needs_refcountingrO   r   rK   rP   r1   s     r   teardown_temp_exprzLetNodeMixin.teardown_temp_expr   s     	3 77=== ++D11111~/ A%%di@@@N''	22222r   N)r   r   r   r   r   r   r    r   r   r   r      sA        4 4 4/ / /(3 3 3 3 3r   r   c                   F    e Zd ZddgZd Zd Zd Zd Zd Zd Z	d	 Z
d
 ZdS )EvalWithTempExprNoder   subexpressionc                 x    |                      |           |j        | _        || _        | j        j        | _        d S r   )r   r   r   r   )r   r   r   s      r   r   zEvalWithTempExprNode.__init__
  s9    9%%% $*&+			r   c                 6    | j                             |          S r   )r   rs   r$   s     r   rs   zEvalWithTempExprNode.infer_type  s    !,,S111r   c                 4    | j                                         S r   )r   ru   rj   s    r   ru   z EvalWithTempExprNode.may_be_none  s    !--///r   c                 4    | j                                         S r   )r   r.   rj   s    r   r.   zEvalWithTempExprNode.result  s    !((***r   c                     | j                             |          | _         | j                            | j                    | j                            |          | _        | j        j        | _        | S r   )r   r&   r   ro   r   r   r$   s     r   r&   z"EvalWithTempExprNode.analyse_types  s_    #3AA#FF(()=>>>!/==cBB&+	r   c                 :    | j                             |           d S r   )r   r>   r1   s     r   free_subexpr_tempsz'EvalWithTempExprNode.free_subexpr_temps!  s    %%d+++++r   c                 :    | j                             |           d S r   )r   r   r1   s     r   generate_subexpr_disposal_codez3EvalWithTempExprNode.generate_subexpr_disposal_code$  s    11$77777r   c                     |                      |           | j                            |           |                     |           d S r   )r   r   r   r   r1   s     r   r   z-EvalWithTempExprNode.generate_evaluation_code'  sG    T"""33D999%%%%%r   N)r   r   r   r   r   rs   ru   r.   r&   r   r   r   r    r   r   r   r     s         "?3H, , ,2 2 20 0 0+ + +  , , ,8 8 8& & & & &r   r   c                   4    e Zd ZddgZd Zd Zd Zd Zd ZdS )	LetNoder   rF   c                 V    |                      |           |j        | _        || _        d S r   )r   r   rF   )r   r   rF   s      r   r   zLetNode.__init__<  s*    9%%%8			r   c                 n    | j                             |           | j                            |           d S r   )r   rS   rF   r$   s     r   rS   zLetNode.analyse_declarationsA  s5    11#666	&&s+++++r   c                     | j                             |          | _         | j                            |          | _        | S r   )r   rW   rF   r$   s     r   rW   zLetNode.analyse_expressionsE  s7    #3GGLLI11#66	r   c                     |                      |           | j                            |           |                     |           d S r   )r   rF   rM   r   r1   s     r   rM   zLetNode.generate_execution_codeJ  sF    T"""	))$///%%%%%r   c                 r    | j                             ||           | j                            ||           d S r   )r   r[   rF   r\   s      r   r[   z%LetNode.generate_function_definitionsO  s9    ::3EEE	//T:::::r   N)	r   r   r   ra   r   rS   rW   rM   r[   r    r   r   r   r   0  sk         %f-K  
, , ,  
& & &
; ; ; ; ;r   r   c                   <    e Zd Zg ZdgZd Zd Zd Zd Zd Z	d Z
dS )	TempResultFromStatNoderF   c                 `    || _         |j        | _        || _        |j        | _        d| _        d S )Nr   )
result_refr   rF   r   rh   )r   r   rF   s      r   r   zTempResultFromStatNode.__init__]  s-    $8	O	r   c                 :    | j                             |           d S r   rR   r$   s     r   rS   z+TempResultFromStatNode.analyse_declarationsd  rT   r   c                 D    | j                             |          | _         | S r   rV   r$   s     r   r&   z$TempResultFromStatNode.analyse_typesg  rX   r   c                 4    | j                                         S r   )r   ru   rj   s    r   ru   z"TempResultFromStatNode.may_be_nonek  s    **,,,r   c                 v    |                                  | j        _        | j                            |           d S r   )r.   r   r|   rF   rM   r1   s     r   r3   z+TempResultFromStatNode.generate_result_coden  s0    &*kkmm#	))$/////r   c                 <    | j                             ||           d S r   rZ   r\   s      r   r[   z4TempResultFromStatNode.generate_function_definitionsr  r]   r   N)r   r   r   r   ra   r   rS   r&   ru   r3   r[   r    r   r   r   r   T  s|         H(K  , , ,  - - -0 0 0; ; ; ; ;r   r   c                   (    e Zd ZdZeZd Zd Zd ZdS )
HasGilNodez`
    Simple node that evaluates to 0 or 1 depending on whether we're
    in a nogil context
    c                     | S r   r    r$   s     r   r&   zHasGilNode.analyse_types}  s    r   c                 (    |j         j        | _        d S r   )rK   	gil_ownedhas_gilr1   s     r   r3   zHasGilNode.generate_result_code  s    ~/r   c                     | j         rdndS )N10)r   rj   s    r   r/   z HasGilNode.calculate_result_code  s    l+ss+r   N)	r   r   r   r`   r
   r   r&   r3   r/   r    r   r   r   r   v  sR          D  0 0 0, , , , ,r   r   N)
__future__r    r   r   r   r   
PyrexTypesr	   r
   objectr   r   rE   rc   r   ExprNoder   
LetRefNodeStatNoder   r   r   r    r   r   <module>r      s   ' & & & & &                   % % % % % % / / / / / / / /= = = = = = = =! ! ! ! !. ! ! !H*! *! *! *! *!T *! *! *!Zn n n n nN n n nb 3  3  3  3  3  3  3  3F&& && && && &&9-| && && &&R 
!; !; !; !; !;enl !; !; !;H; ; ; ; ;Y/ ; ; ;D, , , , , , , , , ,r   