
    -Ph\0                     d   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          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 )   )Nodes)	ExprNodes)Node)AtomicExprNode)
c_ptr_type
c_int_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      Y/var/www/html/test/jupyter/venv/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_code2   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   rhsr0   overloaded_assignments       r   generate_assignment_codez$TempRefNode.generate_assignment_code5   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-   r1   r@   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   rD   generate_execution_coder   put_xdecref_clearput_decref_clearrelease_temp)r   r0   r   s      r   rK   z&TempsBlockNode.generate_execution_codeT   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   rD   analyse_declarationsr"   s     r   rQ   z#TempsBlockNode.analyse_declarationsa       	&&s+++++r   c                 D    | j                             |          | _         | S r   rD   analyse_expressionsr"   s     r   rU   z"TempsBlockNode.analyse_expressionsd       I11#66	r   c                 <    | j                             ||           d S r   rD   generate_function_definitionsr   r#   r0   s      r   rY   z,TempsBlockNode.generate_function_definitionsh        	//T:::::r   c                 :    | j                             |           d S r   )rD   annotater/   s     r   r]   zTempsBlockNode.annotatek   s    	4     r   N)
r   r   r   __doc__child_attrsrK   rQ   rU   rY   r]   r   r   r   rC   rC   B   sr          (K5 5 5, , ,  ; ; ;! ! ! ! !r   rC   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   rc   r   r   rd   rf   s         r   r   zResultRefNode.__init__v   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   )rc   type_dependenciesr"   s     r   rk   zResultRefNode.type_dependencies   s'    ? 	?44S9992r   c                 L    || _         t          |dd           }|r	|| _        d S d S )Nr   )rc   re   r   )r   rc   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   )rc   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   rc   
infer_typer"   s     r   rq   zResultRefNode.infer_type   sU    9 9?&#/++?--c222:::::r   c                 ,    | j         j        sdS | j        S )NF)r   r   rd   rh   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)rc   rs   r   r   rh   s    r   _DISABLED_may_be_nonez#ResultRefNode._DISABLED_may_be_none   s8     ?&?..0009 9((tr   c                     dS ru   r   rh   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AttributeErrorrc   r,   rh   s    r   r,   zResultRefNode.result   sV    	<## 	< 	< 	<*#'?#9#9#;#; 	< s   	 /;;c                     d S r   r   r/   s     r   generate_evaluation_codez&ResultRefNode.generate_evaluation_code   r*   r   c                     d S r   r   r/   s     r   r1   z"ResultRefNode.generate_result_code   r*   r   c                     d S r   r   r/   s     r   generate_disposal_codez$ResultRefNode.generate_disposal_code   r*   r   c                    | j         j        rV|                    |           | j        s:|                    |                                 |                                            |                    |                                 d|r|                                n&|                    |                                           d           |	                    |           |
                    |           d S r3   )r   r   r6   lhs_of_first_assignment
put_decrefr,   r8   r9   r:   r;   r<   r=   s       r   r@   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   rN   zResultRefNode.release_temp   r*   r   c                     d S r   r   r/   s     r   r<   zResultRefNode.free_temps   r*   r   )NNNTFrA   )r   r   r   subexprsr   r   ri   rk   rm   r)   r$   rq   rs   rv   rx   r,   r}   r1   r   r@   r   rN   r<   r   r   r   ra   ra   o   s9        H#$ $ $ $          ; ; ;" " "
               
 
 
 
        r   ra   c                        e Zd Zd Zd Zd ZdS )LetNodeMixinc                 ,    || _         |j        | _        d S r   )	lazy_temprc   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 )NTrF   r4   r5   )r   r}   r   	temp_typeis_arrayr   	base_typeresult_in_temp_result_in_tempr,   r   is_memoryviewslicemake_owned_memoryviewslicer6   rI   rJ   r9   r   r<   r   rz   r/   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_refcountingrM   r   rI   rN   r/   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   rq   r"   s     r   rq   zEvalWithTempExprNode.infer_type  s    !,,S111r   c                 4    | j                                         S r   )r   rs   rh   s    r   rs   z EvalWithTempExprNode.may_be_none  s    !--///r   c                 4    | j                                         S r   )r   r,   rh   s    r   r,   zEvalWithTempExprNode.result  s    !((***r   c                     | j                             |          | _         | j                            | j                    | j                            |          | _        | j        j        | _        | S r   )r   r$   r   rm   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<   r/   s     r   free_subexpr_tempsz'EvalWithTempExprNode.free_subexpr_temps   s    %%d+++++r   c                 :    | j                             |           d S r   )r   r   r/   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   r/   s     r   r}   z-EvalWithTempExprNode.generate_evaluation_code&  sG    T"""33D999%%%%%r   N)r   r   r   r   r   rq   rs   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   rD   c                 V    |                      |           |j        | _        || _        d S r   )r   r   rD   )r   r   rD   s      r   r   zLetNode.__init__;  s*    9%%%8			r   c                 n    | j                             |           | j                            |           d S r   )r   rQ   rD   r"   s     r   rQ   zLetNode.analyse_declarations@  s5    11#666	&&s+++++r   c                     | j                             |          | _         | j                            |          | _        | S r   )r   rU   rD   r"   s     r   rU   zLetNode.analyse_expressionsD  s7    #3GGLLI11#66	r   c                     |                      |           | j                            |           |                     |           d S r   )r   rD   rK   r   r/   s     r   rK   zLetNode.generate_execution_codeI  sF    T"""	))$///%%%%%r   c                 r    | j                             ||           | j                            ||           d S r   )r   rY   rD   rZ   s      r   rY   z%LetNode.generate_function_definitionsN  s9    ::3EEE	//T:::::r   N)	r   r   r   r_   r   rQ   rU   rK   rY   r   r   r   r   r   /  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 )	TempResultFromStatNoderD   c                 `    || _         |j        | _        || _        |j        | _        d| _        d S )Nr   )
result_refr   rD   r   rf   )r   r   rD   s      r   r   zTempResultFromStatNode.__init__\  s-    $8	O	r   c                 :    | j                             |           d S r   rP   r"   s     r   rQ   z+TempResultFromStatNode.analyse_declarationsc  rR   r   c                 D    | j                             |          | _         | S r   rT   r"   s     r   r$   z$TempResultFromStatNode.analyse_typesf  rV   r   c                 4    | j                                         S r   )r   rs   rh   s    r   rs   z"TempResultFromStatNode.may_be_nonej  s    **,,,r   c                 v    |                                  | j        _        | j                            |           d S r   )r,   r   rz   rD   rK   r/   s     r   r1   z+TempResultFromStatNode.generate_result_codem  s0    &*kkmm#	))$/////r   c                 <    | j                             ||           d S r   rX   rZ   s      r   rY   z4TempResultFromStatNode.generate_function_definitionsq  r[   r   N)r   r   r   r   r_   r   rQ   r$   rs   r1   rY   r   r   r   r   r   S  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 )HasNoGilNodez\
    Simple node that evaluates to
    * 0 if gil
    * 1 if nogil
    * 2 if maybe gil
    c                     | S r   r   r"   s     r   r$   zHasNoGilNode.analyse_types~  s    r   c                     d S r   r   r/   s     r   r1   z!HasNoGilNode.generate_result_code  r*   r   c                 D    t          t          | j                            S r   )strintin_nogil_contextrh   s    r   r-   z"HasNoGilNode.calculate_result_code  s    3t,--...r   N)	r   r   r   r^   r   r   r$   r1   r-   r   r   r   r   r   u  sR          D    / / / / /r   r   N) r   r   r   r   
PyrexTypesr   r   r
   r   rC   ra   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   