U
    ½mœdm  ã                   @   sD   d Z ddlZddlZddlZddlZddlmZ dd„ Zdd„ ZdS )	z,Helpers for OpenMP support during the build.é    Né   )Úcompile_test_programc                 C   sR   t | dƒr| jd } n| jj} tjdkr.dgS tjdkrLdt dd¡krLg S d	gS )
NÚcompilerr   Úwin32z/openmpÚdarwinZopenmpÚCPPFLAGSÚ z-fopenmp)Úhasattrr   Ú	__class__Ú__name__ÚsysÚplatformÚosÚgetenv)r   © r   ú\/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/sklearn/_build_utils/openmp_helpers.pyÚget_openmp_flag   s    

r   c            	   
   C   s  dt jkrdS t d¡} t  dd¡}|dk	rH| ¡  d¡}dd„ |D ƒ}t}d}z^t| ||d	�}|r˜d
|d kr˜t	|d  ¡  d¡d ƒ}t
|ƒ|k}ndt jkr¨d}nd}W n* tk
rØ } zd}|}W 5 d}~X Y nX |�s
t  d¡rötdƒ|‚nt d¡}t |¡ |S )z6Check whether OpenMP test code can be compiled and runZPYODIDE_PACKAGE_ABIFzÆ        #include <omp.h>
        #include <stdio.h>
        int main(void) {
        #pragma omp parallel
        printf("nthreads=%d\n", omp_get_num_threads());
        return 0;
        }
        ÚLDFLAGSNú c                 S   s   g | ]}|  d ¡r|‘qS ))z-Lz
-Wl,-rpathz-lz-Wl,--sysroot=/)Ú
startswith)Ú.0Úflagr   r   r   Ú
<listcomp>?   s   
þz(check_openmp_support.<locals>.<listcomp>)Úextra_preargsÚextra_postargsz	nthreads=r   ú=r   ZPYTHON_CROSSENVTZSKLEARN_FAIL_NO_OPENMPz0Failed to build scikit-learn with OpenMP supportas  

                                ***********
                                * WARNING *
                                ***********

                It seems that scikit-learn cannot be built with OpenMP.

                - Make sure you have followed the installation instructions:

                    https://scikit-learn.org/dev/developers/advanced_installation.html

                - If your compiler supports OpenMP but you still see this
                  message, please submit a bug report at:

                    https://github.com/scikit-learn/scikit-learn/issues

                - The build will continue with OpenMP-based parallelism
                  disabled. Note however that some estimators will run in
                  sequential mode instead of leveraging thread-based
                  parallelism.

                                    ***
                )r   ÚenvironÚtextwrapÚdedentr   ÚstripÚsplitr   r   ÚintÚlenÚ	ExceptionÚwarningsÚwarn)	Úcoder   r   Zopenmp_exceptionÚoutputZnthreadsZopenmp_supportedÚ	exceptionÚmessager   r   r   Úcheck_openmp_support(   sP    
ÿþ  ÿ

ÿþÿ
r*   )	Ú__doc__r   r   r   r$   Zpre_build_helpersr   r   r*   r   r   r   r   Ú<module>   s   