o
    >e                     @   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y.   ed ed ed  w 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y6 } z|r+td|d| W Y d }~dS d }~ww t	| |sEt
tj|  |   tj|< |rtt
 d| t fdd|j D ]\}}|rmt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 M/home/www/facesmatcher.com/pyenv/lib/python3.10/site-packages/cv2/__init__.py<lambda>*   s    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   r1   c                     s  dd l } dd l}|| j}t| drt| j tdd| _d t| dr(d dd l} r;tdt	j
t|  t	jt	jt	jtg }g }t t  | jd d d	k red
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  rtdtd   rtdtd  d}t| drd}n'zt	j}| jd |kst	j| jd |krd}W n
    rtd Y td D ]}	| j|sd
nd|	 qt	j
dkrS| jd d dkr0d D ])}	zt	|	 W q ty/ }
 z r$tdt|
  W Y d }
~
qd }
~
ww dd d t	jdd t	jd<  rRtdtt	jd  ndd d t	jdd t	jd<  rmtd  | jd!}t !d!}|| jd!< t"|d"| t#d#d$ |j$% D ]\}}|vr||< q|| _z| `W n ty }
 z rtd%|
 W Y d }
~
nd }
~
ww  rtd& t& D ]}t'd!| r܈ rtd'|d( qʈ rtd) d S 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 j|}t j|s rtd| q r$td| |  dS |r6t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_DIRr5   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vS )Nr   )r.   
__loader____spec__r   __package__r   r   r   r   r	   r
      s    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   r2   platformr   r$   r   strsystemr/   r-   realpathr.   globalslocalsr,   Zload_config_py2r5   Zload_config_py3reversedinsertZadd_dll_directory	Exceptionr'   environgetr   r   r   r   r   r   r   r   r1   r    )r   rH   Zsave_sys_pathrI   r=   r>   r<   ZapplySysPathWorkaroundZBASE_DIRper   r   Z	item_nameitem	submoduler   r:   r	   	bootstrapD   s   




$&&



rX   )F)__doc__r$   r   r   __all__numpyZnumpy.core.multiarrayr   r   r    r1   rX   r   r   r   r	   <module>   s$    



q