3
PO[                 @   s   d dl mZ ddlmZ ddlT ddlmZ ddlmZ ddl	m
Z
 ddlmZ G d	d
 d
eZdd Zdd ZeddZedZedZeddeegdZedZdS )    )absolute_import   )ModuleScope)*)CythonUtilityCode)error)StringSourceDescriptor)
MemoryViewc                   sh   e Zd ZdZdZdd Zdd Z fddZ fd	d
Zdd Z	dd Z
dd Zdd Zdd Z  ZS )CythonScoper   Fc             C   sV   t j| dd d  d| _| j  || _x,tttfD ]}| j|j	|d dd}d|_
q0W d S )NcythonTz<error>)cname)r   __init__pxd_file_loadedpopulate_cython_scopecontextcy_integral_typecy_floating_typecy_numeric_typedeclare_typedefnamein_cinclude)selfr   
fused_typeentry r   k/home/psgendb/BIRCHDEV/lib-linux-x86_64/python/lib64/python3.6/site-packages/Cython/Compiler/CythonScope.pyr      s    zCythonScope.__init__c             C   s   | j jS )N)r   cpp)r   r   r   r   is_cpp   s    zCythonScope.is_cppc                s    t |}|r|S tt| j|S )N)parse_basic_typesuperr
   lookup_type)r   r   type)	__class__r   r   r    !   s    zCythonScope.lookup_typec                s<   t t| j|}|d kr8| j r8| j  t t| j|}|S )N)r   r
   lookup_cythonscope_initializedload_cythonscope)r   r   r   )r"   r   r   r#   )   s
    zCythonScope.lookupc             C   s   t d| | d S )Nzcython.%s is not available)r   )r   module_nameposr   r   r   find_module2   s    zCythonScope.find_modulec             C   sV   | j j|d }|s(| j  | j j|d }|r8|jr8|jS ttddddfd| d S )Nr    r   zcython.%s is not available)entriesgetr%   	as_moduler   r   )r   r&   r   r   r   r   find_submodule5   s    
zCythonScope.find_submodulec             C   s\   |j d}| }xHt|dkrH|j|d }|r4|j}|d= |d krd S qW |j|d S d S )N.r   r   )splitlenlookup_herer,   )r   qname	name_pathscoper   r   r   lookup_qualified_nameE   s    
z!CythonScope.lookup_qualified_namec          	   C   sT   | j dtd dd}d|_|j}| jdtttdtd tdt	|d gd ddd d S )	NPyTypeObject)	base_typer'   r   TPyObject_TypeCheckotr   )r'   definingr   )
r   c_void_typeis_voidr!   declare_cfunction	CFuncTypec_bint_typeCFuncTypeArgpy_object_type
c_ptr_type)r   type_objecttype_object_typer   r   r   r   S   s    z!CythonScope.populate_cython_scopec             C   s   | j r
dS d| _ tj| | d tj| | d td| d | _}|| jd|d_d|_d|_	t
j|| d tjj| j| tjd}dS )zy
        Creates some entries for testing purposes and entries for
        cython.array() and for cython.view.*.
        NT)cython_scopeview)rF   	whitelist)r$   cython_testscope_utility_codedeclare_in_scope!cython_test_extclass_utility_coder   	viewscopedeclare_moduler,   is_cython_builtinr   !cythonview_testscope_utility_coder	   view_utility_codeview_utility_whitelist)r   rL   view_utility_scoper   r   r   r%   e   s     


zCythonScope.load_cythonscope)__name__
__module____qualname__rN   r$   r   r   r    r#   r(   r-   r5   r   r%   __classcell__r   r   )r"   r   r
      s   	r
   c             C   s   t | S )N)r
   )r   r   r   r   create_cython_scope   s    rW   c             K   s   t j| df|S )NzTestCythonScope.pyx)r   load)cy_util_namekwargsr   r   r   load_testscope_utility   s    r[   a  
    /* These methods are undecorated and have therefore no prototype */
    static PyObject *__pyx_TestClass_cdef_method(
            struct __pyx_TestClass_obj *self, int value);
    static PyObject *__pyx_TestClass_cpdef_method(
            struct __pyx_TestClass_obj *self, int value, int skip_dispatch);
    static PyObject *__pyx_TestClass_def_method(
            PyObject *self, PyObject *value);
)proto	TestScopeTestDep	TestClass)r   requireszView.TestScopeN)
__future__r   Symtabr   
PyrexTypesUtilityCoder   Errorsr   Scanningr   r)   r	   r
   rW   r[   undecorated_methods_protosrI   test_cython_utility_deprK   rO   r   r   r   r   <module>   s"   z
