a
    b                     @   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   sR   t | dd d  d| _|   || _tttfD ]}| j|j	|d dd}d|_
q.d S )NcythonTz<error>)cname)r   __init__pxd_file_loadedpopulate_cython_scopecontextZcy_integral_typeZcy_floating_typeZcy_numeric_typedeclare_typedefnameZin_cinclude)selfr   Z
fused_typeentry r   k/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/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| |S r   )Zparse_basic_typesuperr   lookup_type)r   r   type	__class__r   r   r   !   s    zCythonScope.lookup_typec                    s:   t t| |}|d u r6| js6|   t t| |}|S r   )r   r   lookup_cythonscope_initializedload_cythonscope)r   r   r   r   r   r   r    )   s
    zCythonScope.lookupc                 C   s   t d| | d S )Ncython.%s is not availabler   )r   module_nameposr   r   r   find_module2   s    zCythonScope.find_modulec                 C   sV   | j |d }|s(|   | j |d }|r8|jr8|jS ttddddfd| d S )Nr    r   r#   )entriesgetr"   	as_moduler   r	   )r   r$   r   r   r   r   find_submodule5   s    
zCythonScope.find_submodulec                 C   sT   | d}| }t|dkrF||d }|r2|j}|d= |d u rd S q||d S )N.r   r   )splitlenZlookup_herer*   )r   qnameZ	name_pathZ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 )	NZPyTypeObject)Z	base_typer%   r   TZPyObject_TypeCheckotr   )r%   Zdefiningr   )
r   Zc_void_typeZis_voidr   Zdeclare_cfunctionZ	CFuncTypeZc_bint_typeZCFuncTypeArgZpy_object_typeZ
c_ptr_type)r   Ztype_objectZ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 | _}|| 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)r3   	whitelist)r!   cython_testscope_utility_codeZdeclare_in_scope!cython_test_extclass_utility_coder   	viewscopeZdeclare_moduler*   is_cython_builtinr   !cythonview_testscope_utility_coder
   Zview_utility_codeZview_utility_whitelist)r   r8   Zview_utility_scoper   r   r   r"   e   s(    zCythonScope.load_cythonscope)__name__
__module____qualname__r9   r!   r   r   r   r    r&   r+   r0   r   r"   __classcell__r   r   r   r   r      s   	r   c                 C   s   t | S r   )r   )r   r   r   r   create_cython_scope   s    r?   c                 K   s   t j| dfi |S )NzTestCythonScope.pyx)r   load)Zcy_util_namekwargsr   r   r   load_testscope_utility   s    rB   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);
)protoZ	TestScopeZTestDepZ	TestClass)r   requireszView.TestScopeN)
__future__r   ZSymtabr   Z
PyrexTypesZUtilityCoder   ZErrorsr   ZScanningr	   r'   r
   r   r?   rB   Zundecorated_methods_protosr6   Ztest_cython_utility_depr7   r:   r   r   r   r   <module>   s&   z

