o
    8ήc                     @   sT   d dl mZmZ d dlmZmZ edG dd deZedG dd deZdS )	    )errorsir)register_rewriteRewritezbefore-inferencec                   @       e Zd ZdZdd Zdd ZdS )RewritePrintCallszU
    Rewrite calls to the print() global function to dedicated IR print() nodes.
    c           
   	   C   s   i  | _ }|| _|tjD ]9}t|jtjrG|jjdkrG|j}z|	|j
}W n
 tjy2   Y qw |tu rG|jrCd}	t|	|j|||< qt|dkS )NcallzKNumba's print() function implementation does not support keyword arguments.r   )printsblock
find_instsr   Assign
isinstancevalueExpropinfer_constantfuncr   ConstantInferenceErrorprintkwsUnsupportedErrorloclen)
selffunc_irr
   typemap	calltypesr	   instexprcalleemsg r!   C/tmp/pip-target-vg8gfxp4/lib/python/numba/core/rewrites/ir_print.pymatch   s"   
zRewritePrintCalls.matchc                 C   s   | j  }|  | j jD ]7}|| jv r?| j| }tj|j|j|j	d}|
| tjtjd|j	d|j|j	d}|
| q|
| q|S )z{
        Rewrite `var = call <print function>(...)` as a sequence of
        `print(...)` and `var = const(None)`.
        )argsvarargr   N)r   )r   targetr   )r
   copyclearbodyr	   r   Printr$   r%   r   appendr   Constr&   )r   	new_blockr   r   
print_nodeassign_noder!   r!   r"   apply   s    



zRewritePrintCalls.applyN__name__
__module____qualname____doc__r#   r0   r!   r!   r!   r"   r      s    r   c                   @   r   )DetectConstPrintArgumentsz?
    Detect and store constant arguments to print() nodes.
    c           
   
   C   s~   i  | _ }|| _|tjD ]*}|j rqt|jD ]\}}z||}	W n
 tj	y.   Y qw |	|
|i |< qqt|dkS )Nr   )constsr
   r   r   r*   	enumerater$   r   r   r   
setdefaultr   )
r   r   r
   r   r   r7   r   idxvarconstr!   r!   r"   r#   ;   s   
zDetectConstPrintArguments.matchc                 C   s*   | j jD ]}|| jv r| j| |_q| j S )zC
        Store detected constant arguments on their nodes.
        )r
   r)   r7   )r   r   r!   r!   r"   r0   K   s
   
zDetectConstPrintArguments.applyNr1   r!   r!   r!   r"   r6   5   s    r6   N)
numba.corer   r   numba.core.rewritesr   r   r   r6   r!   r!   r!   r"   <module>   s    /