U
    ,d                     @   sZ   d Z ddlZddlmZmZ ddlmZmZ G dd dZej	Z
G dd dZd	d
 ZdS )z
Target Options
    N)configutils)TargetConfigOptionc                   @   s:   e Zd ZdZG dd dZdd Zedd Zdd	 Zd
S )TargetOptionszTarget options maps user options from decorators to the
    ``numba.core.compiler.Flags`` used by lowering and target context.
    c                   @   s   e Zd Zdd fddZdS )zTargetOptions.Mappingc                 C   s   | S N )xr   r   6/tmp/pip-unpacked-wheel-eu7e0c37/numba/core/options.py<lambda>       zTargetOptions.Mapping.<lambda>c                 C   s   || _ || _d S r   )	flag_nameapply)selfr   r   r   r   r
   __init__   s    zTargetOptions.Mapping.__init__N)__name__
__module____qualname__r   r   r   r   r
   Mapping   s   r   c                 C   s   dS )zSubclasses can override this method to make target specific
        customizations of default flags.

        Parameters
        ----------
        flags : Flags
        options : dict
        Nr   )r   flagsoptionsr   r   r
   finalize   s    	zTargetOptions.finalizec                 C   s"   |  }| || ||| |S )zParse target options defined in ``options`` and set ``flags``
        accordingly.

        Parameters
        ----------
        flags : Flags
        options : dict
        )_applyr   )clsr   r   optr   r   r
   parse_as_flags   s    
zTargetOptions.parse_as_flagsc                 C   s   i }t | }t|D ]"}t||}t||jr|||< qt }| D ]6\}}||krF||| }t||j	| |
| qFt|| }	|	rd|	 d|  }
t|
d S )NzUnrecognized options: z. Known options are )typedirgetattr
isinstancer   setitemsr   setattrr   addkeysKeyError)r   r   r   Zmappingsr   kvusedmappingZunusedmr   r   r
   r   -   s     

zTargetOptions._applyN)	r   r   r   __doc__r   r   classmethodr   r   r   r   r   r
   r   
   s   
r   c                   @   s   e Zd ZdZedejZedZedZ	edZ
edZedZedZed	Zed
ZedZedZedZedZedZedZedZedZedZdS )DefaultOptionszJDefines how user-level target options are mapped to the target flags.
    Zenable_pyobjectZforce_pyobjectZenable_loopliftZnrtZ	debuginfoboundscheckZrelease_gilno_rewritesno_cpython_wrapperno_cfunc_wrapperZauto_parallelfastmatherror_modelinlineforceinlinetarget_backendZdbg_extend_lifetimesZdbg_optnoneN)r   r   r   r+   _mappingoperatornot_ZnopythonZforceobjZloopliftZ_nrtdebugr.   Znogilr/   r0   r1   parallelr2   r3   r4   r5   r6   Z_dbg_extend_lifetimesZ_dbg_optnoner   r   r   r
   r-   H   s&   r-   c                  G   s   dd | D }t dd|S )zReturns a mixin class with a subset of the options

    Parameters
    ----------
    *args : str
        Option names to include.
    c                 S   s   i | ]}|t t|qS r   )r   r-   ).0r&   r   r   r
   
<dictcomp>k   s      z+include_default_options.<locals>.<dictcomp>ZOptionMixinsr   )r   )argsZglbsr   r   r
   include_default_optionsc   s    r?   )r+   r8   Z
numba.corer   r   Znumba.core.targetconfigr   r   r   r   r7   r-   r?   r   r   r   r
   <module>   s   ;