U
    œA{iÔ  ã                   @   sŠ   d Z ddlZddlZddlZg ZzddlZddlZW n. ek
rb   edƒ edƒ edƒ ‚ Y nX ddd„Z	dd	d
„Z
dd„ Zeƒ  dS )z'
OpenCV Python binary extension loader
é    Nz)OpenCV bindings requires "numpy" package.zInstall it via command:z    pip install numpyFc           	   
      sþ   d  t|¡}d  | |¡}tj |d ¡}zt |¡‰ W n: tk
rn } z|rXtd|d|ƒ W Y ¢dS d }~X Y nX | tjkrœt	tj|  |ƒsœt
tj|  |ˆ ƒ ˆ tj|< |rút
ˆ d|ƒ t‡ fdd„|j ¡ ƒD ]*\}}|rìtd  |||¡ƒ t
ˆ ||ƒ qÎd	S )
Nz{}.{}z"Can't load Python code for module:z	. Reason:FÚ_nativec                    s   t ˆ | d ƒ S )Nr   )Úhasattr©Úkv©Ú	py_module© ú0/tmp/pip-unpacked-wheel-qv1a4xi0/cv2/__init__.pyÚ<lambda>*   ó    z1__load_extra_py_code_for_module.<locals>.<lambda>z    symbol({}): {} = {}T)ÚformatÚ__name__ÚsysÚmodulesÚpopÚ	importlibÚimport_moduleÚImportErrorÚprintr   ÚsetattrÚfilterÚ__dict__Úitems)	ÚbaseÚnameÚenable_debug_printÚmodule_nameZexport_module_nameÚnative_moduleÚerrÚkÚvr   r   r	   Ú__load_extra_py_code_for_module   s0     ÿ
ÿ r!   c                    sR   ‡ fdd„}t jd dk r*| r&tdƒ g S tj t¡}tj |¡‰ t|t 	ˆ ¡ƒS )Nc              	      s0   t |  d¡ |  d¡ tj tj ˆ | ¡¡fƒS )NÚ_zpython-)ÚallÚ
startswithÚosÚpathÚisdirÚjoin)Úmodule©Z_extra_submodules_init_pathr   r	   Úmodules_filter2   s
    

ûz2__collect_extra_submodules.<locals>.modules_filterr   é   z,Extra submodules is loaded only for Python 3)
r   Úversion_infor   r%   r&   ÚabspathÚ__file__Údirnamer   Úlistdir)r   r+   Z__INIT_FILE_PATHr   r*   r	   Ú__collect_extra_submodules1   s    r2   c                     sÞ  dd l } dd l}| | j¡}t| dƒr8t| jƒ tdƒ‚d| _d‰ t| dƒrPd‰ dd l}ˆ rvtd t	j
t| ¡ ƒ¡ƒ t	j t	j t	j t¡¡¡‰g }g }tƒ ‰tƒ  ¡ ‰| jd d… d	k rÊd
dlm‰ nd
dlm‰ d*‡ ‡‡‡‡fdd„	}|dgdƒ |d | jd | jd
 ¡d | jd ¡gdƒ ˆ �rBtd tˆd ƒ¡ƒ ˆ �r^td tˆd ƒ¡ƒ d}t| dƒ�rtd}nXz<t	j ˆ¡}| jd |k�sªt	j | jd ¡|k�r®d}W n   ˆ �rÆtdƒ Y nX tˆd ƒD ]}	| j |�sìd
nd|	¡ �qØt	j
dk�r¸| jd d… dk�rrˆd D ]P}	zt	 |	¡ W n: tk
�rl }
 zˆ �r\tdt|
ƒ ƒ W 5 d }
~
X Y nX �q d ˆd ¡d t	j dd¡ t	jd< ˆ �rÞtd tt	jd ƒ¡ƒ n&d ˆd ¡d t	j dd¡ t	jd< ˆ �rìtd ƒ | j d!¡}t  !d!¡}|| jd!< t"|d"|ƒ t#d#d$„ |j$ %¡ ƒD ]\}}|ˆk�r,|ˆ|< �q,|| _z| `W n4 tk
�rŒ }
 zˆ �r|td%|
ƒ W 5 d }
~
X Y nX ˆ �rœtd&ƒ t&ˆ ƒD ]&}t'd!|ˆ ƒ�r¤ˆ �r¤td'|d(ƒ �q¤ˆ �rÚtd)ƒ d S )+Nr   ÚOpenCV_LOADERzbERROR: recursion is detected during loading of "cv2" binary extensions. Check OpenCV installation.TFZOpenCV_LOADER_DEBUGz3OpenCV loader: os.name="{}"  platform.system()="{}"é   )r,   r   é   )Úexec_file_wrapperc                    sp   | D ]T}t j ˆ|¡}t j |¡s6ˆ rtd |¡ƒ qˆ rHtd |¡ƒ ˆ|ˆˆƒ  dS |rltd | ¡ƒ‚d S )Nz)OpenCV loader: config not found, skip: {}z!OpenCV loader: loading config: {}TzIOpenCV loader: missing configuration file: {}. Check OpenCV installation.)r%   r&   r(   Úexistsr   r   r   )ÚfnamesÚrequiredÚfnameZfpath©ÚDEBUGZ
LOADER_DIRr6   Zg_varsZl_varsr   r	   Úload_first_configc   s      z$bootstrap.<locals>.load_first_configz	config.pyzconfig-{}.{}.pyzconfig-{}.pyz)OpenCV loader: PYTHON_EXTENSIONS_PATHS={}ÚPYTHON_EXTENSIONS_PATHSz OpenCV loader: BINARIES_PATHS={}ÚBINARIES_PATHSZOpenCV_REPLACE_SYS_PATH_0zCOpenCV loader: exception during checking workaround for sys.path[0]Únt)r,   é   zFailed os.add_dll_directory(): ú;ÚPATHÚ zOpenCV loader: PATH={}ú:ZLD_LIBRARY_PATHz7Relink everything from native cv2 module to cv2 packageZcv2r   c                 S   s   | d dkS )Nr   )r/   Ú
__loader__Ú__spec__r   Ú__package__r   r   r   r   r	   r
   ž   r   zbootstrap.<locals>.<lambda>z&Exception during delete OpenCV_LOADER:z%OpenCV loader: binary extension... OKzExtra Python code forz	is loadedzOpenCV loader: DONE)T)(r   Úcopyr&   r   r   r   r3   Úplatformr   r%   r   ÚstrÚsystemr0   r.   Úrealpathr/   ÚglobalsÚlocalsr-   Zload_config_py2r6   Zload_config_py3ÚreversedÚinsertZadd_dll_directoryÚ	Exceptionr(   ÚenvironÚgetr   r   r   r   r   r   r   r   r2   r!   )r   rI   Zsave_sys_pathrJ   r>   r?   r=   ZapplySysPathWorkaroundZBASE_DIRÚpÚer   r   Z	item_nameÚitemÚ	submoduler   r;   r	   Ú	bootstrapD   s¨    


 
þý  (  & & 

þ
   rY   )F)F)Ú__doc__r%   r   r   Ú__all__ZnumpyZnumpy.core.multiarrayr   r   r!   r2   rY   r   r   r   r	   Ú<module>   s    

q