o
    8ήce                     @   s   d dl Z d dlmZmZmZmZmZmZmZ d dl	m
Z
mZmZ d dlmZ edddG dd	 d	e
ZedddG d
d deZdS )    N)errorstypestypingfuncdescconfig
pylowering
transforms)FunctionPassLoweringPassregister_pass)defaultdictTF)mutates_CFGanalysis_onlyc                   @   (   e Zd ZdZdd Zdd Zdd ZdS )	ObjectModeFrontEndobject_mode_front_endc                 C      t |  d S N)r	   __init__self r   D/tmp/pip-target-vg8gfxp4/lib/python/numba/core/object_mode_passes.pyr         zObjectModeFrontEnd.__init__c           	      C   s   |j  }|j  }d|_d|_|j jsd|_d|_tj|j|j	|j
|j|d\}}|r[tjs2tjr>|D ]	}td|  q4ddlm} ||j	|j
||j|j||jt|ddd
}|S dS )	z:
        Loop lifting analysis and transformation
        F)	typingctx	targetctxlocalsflagszLifting loopr   )
compile_irNT)liftedlifted_fromis_lifted_loop)r   copyenable_loopliftenable_pyobject_loopliftenable_pyobject
enable_ssar   loop_liftingfunc_irr   r   r   r   DEBUG_FRONTENDDEBUGprintget_source_locationnumba.core.compilerr   argsreturn_typetuple)	r   state
loop_flagsouter_flagsmainloopsloopr   cresr   r   r   _frontend_looplift   s4   


z%ObjectModeFrontEnd._frontend_loopliftc                 C   s`   ddl m} |jjr|jrJ | |}|d ur||tdd |_tdd |_t	j
|_dS )Nr   )_EarlyPipelineCompletionc                   S      t jS r   r   pyobjectr   r   r   r   <lambda>:       z-ObjectModeFrontEnd.run_pass.<locals>.<lambda>c                   S   r:   r   r;   r   r   r   r   r=   ;   r>   T)r-   r9   r   r#   r   r8   r   typemap	calltypesr   r<   r/   )r   r1   r9   r7   r   r   r   run_pass/   s   

zObjectModeFrontEnd.run_passN)__name__
__module____qualname___namer   r8   rA   r   r   r   r   r   	   s
    r   c                   @   r   )	ObjectModeBackEndobject_mode_back_endc                 C   r   r   )r
   r   r   r   r   r   r   E   r   zObjectModeBackEnd.__init__c                 C   s   t j|}||" t||||}|  |js|  |j	}|j
}~W d    n1 s0w   Y  ddlm}	 |jrF|	||d |dS ||||}
|	|||
|dS )Nr   )_LowerResult)cfuncenv)r   PythonFunctionDescriptorfrom_object_mode_functionpush_code_libraryr   PyLowerlowerno_cpython_wrappercreate_cpython_wrapperrJ   call_helperr-   rH   
no_compileget_executable)r   r   libraryinterpr   fndescrO   rJ   rR   rH   rI   r   r   r   _py_lowering_stageH   s"   z$ObjectModeBackEnd._py_lowering_stagec           
         s:  j du rj }|jj_ j    fdd}| }tjj	gj
R  }ddlm} |jj|jjjjj |j|dj|j|jjjd_jjstjdkredjjf }nd	jjf }tt |j!j" d
}d| }	tt#|	j!j" jj$rd}t%|tj jj&jj' dS )z*
        Lowering for object mode
        Nc                      sL   t jjkrtjtjfjt j   _ jjj	j
S )z1
            Object mode compilation
            )lenr.   nargsr0   r   r<   rX   r   rU   r(   r   r   r   r1   r   r   backend_object_modeh   s   z7ObjectModeBackEnd.run_pass.<locals>.backend_object_moder   )compile_resultT)typing_contexttarget_contextentry_pointtyping_errortype_annotationrU   rR   	signature
objectmoder   rW   environmentmetadatareload_initzVFunction "%s" was compiled in object mode without forceobj=True, but has lifted loops.z@Function "%s" was compiled in object mode without forceobj=True.zhttps://numba.readthedocs.io/en/stable/reference/deprecation.html#deprecation-of-object-mode-fall-back-behaviour-when-using-jitz
Fall-back from the nopython compilation path to the object mode compilation path has been detected, this is deprecated behaviour.

For more information visit %szNCode running in object mode won't allow parallel execution despite nogil=True.)(rU   r   codegencreate_libraryfunc_idfunc_qualnameenable_object_cachingr   rc   r/   r.   r-   r]   r   rI   statusfail_reasonrb   rR   r   rW   rJ   rf   rg   crr   force_pyobjectrY   	func_namewarningswarnr   NumbaWarningr(   locNumbaDeprecationWarningrelease_gilwarn_explicitfilenamefirstlineno)
r   r1   rh   r\   loweredrc   r]   warn_msgurlmsgr   r[   r   rA   \   sb   





zObjectModeBackEnd.run_passN)rB   rC   rD   rE   r   rX   rA   r   r   r   r   rF   @   s
    rF   )rr   
numba.corer   r   r   r   r   r   r   numba.core.compiler_machineryr	   r
   r   collectionsr   r   rF   r   r   r   r   <module>   s    $

6