B
    0d                 @   s   d dl Z d dlZd dlZd dlmZmZmZmZmZm	Z	m
Z
mZmZmZ d dlmZ dd ZeejedkrxeZn*dddZG d	d
 d
eZG dd deZdS )    N)
system_info
numpy_infoNotFoundErrorBlasNotFoundErrorLapackNotFoundErrorAtlasNotFoundErrorLapackSrcNotFoundErrorBlasSrcNotFoundErrordict_appendget_info)_pep440c              O   s   i }x|f|  D ]}x|  D ]x\}}||ddk	r|| }t|ttfrrt|ttfr|t|t| ||< qn
||kr|qtd||q|||< qW qW |S )a  
    Combine Numpy distutils style library configuration dictionaries.

    Parameters
    ----------
    *dicts
        Dictionaries of keys. List-valued keys will be concatenated.
        Otherwise, duplicate keys with different values result to
        an error. The input arguments are not modified.
    **kw
        Keyword arguments are treated as an additional dictionary
        (the first one, i.e., prepended).

    Returns
    -------
    combined
        Dictionary with combined values.
    Nz*Conflicting configuration dicts: {!r} {!r})itemsget
isinstancelisttuple
ValueErrorformat)ZdictskwZnew_dictdkeyvalue	old_value r   P/var/www/html/venv/lib/python3.7/site-packages/scipy/_build_utils/system_info.pycombine_dict   s    r   z
1.15.0.devc             C   s2   t td|  }|d kr&t| |S | |S )N)Z
lapack_optZblas_opt)lapack_opt_infoblas_opt_infor   lowerold_get_infor   )nameZnotfound_actionclsr   r   r   r   D   s
    
r   c               @   s   e Zd ZeZdd ZdS )r   c             C   s  t d}|r| jf | d S t d}|r8| jf | d S t d}|rT| jf | d S t d}|sht d}|stt d}|st d}d}d}i }|r|d	g }d
|ksd|krd}|}n&tjtjdd d}d}t|dgd |r@t d}|rt|f| nDtjtjdd t d}	|	s.tjt	jdd d S t|d|	fgd |rt d}
|
rbt|f|
 nDtjt
jdd t d}|stjtjdd d S t|d|fgd | jf | d S )NZ
lapack_mklZopenblas_lapackZopenblas_clapackZatlas_3_10_threadsZ
atlas_3_10Zatlas_threadsZatlasr   define_macros)ZATLAS_WITH_LAPACK_ATLASN)ZATLAS_WITHOUT_LAPACKN      )
stacklevel)NO_ATLAS_INFOr#   )r"   ZlapackZ
lapack_srcZflapack_src)	librariesblasblas_src	fblas_src)r   set_infor   warningswarnr   __doc__r
   r   r   r   r	   )selfZlapack_mkl_infoopenblas_info
atlas_infoZneed_lapack	need_blasinfolZlapack_infoZlapack_src_info	blas_infoblas_src_infor   r   r   	calc_infoU   sl    zlapack_opt_info.calc_infoN)__name__
__module____qualname__r   notfounderrorr7   r   r   r   r   r   Q   s   r   c               @   s   e Zd ZeZdd ZdS )r   c       	      C   s(  t d}|r| jf | d S t d}|r8| jf | d S t d}|rT| jf | d S t d}|sht d}|stt d}|st d}d}i }|r|}n"tjtjd	d
 d}t|dgd |rt d}|rt|f| nDtjtjd	d
 t d}|stjtjd	d
 d S t|d|fgd | jf | d S )NZblas_mklZblisZopenblasZatlas_3_10_blas_threadsZatlas_3_10_blasZatlas_blas_threadsZ
atlas_blasr   r$   )r%   r#   )r&   r#   )r"   r(   r)   r*   )r'   )	r   r+   r,   r-   r   r.   r
   r   r	   )	r/   Zblas_mkl_infoZ	blis_infor0   r1   r2   r3   r5   r6   r   r   r   r7      sL    zblas_opt_info.calc_infoN)r8   r9   r:   r   r;   r7   r   r   r   r   r      s   r   )r   )r,   numpynpZnumpy.distutils.system_infor   r   r   r   r   r   r   r	   r
   r   r   Z
scipy._libr   r   parse__version__Versionr   r   r   r   r   r   <module>   s   0(
I