a
    )a                     @   s   d dl Zd dlZd dlmZ d dlmZ d dl	m
Z
 d dlZdd Zdd Zd	d
 Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZG dd dZdS )    N)_get__daal_link_version__)__version__)LooseVersionc                  C   sf   dd l } dd l}|jd}z"|d ur<tjtjd| d W n" t	y`   | 
d| Y n0 d S )Nr   ZIDP_SKLEARN_VERBOSEz%(levelname)s: %(message)s)streamformatlevelzcUnknown level "{}" for logging.
Please, use one of "CRITICAL", "ERROR", "WARNING", "INFO", "DEBUG".)warningsosenvirongetloggingZbasicConfigsysstdoutupper	Exceptionwarnr   )r   r	   ZlogLevel r   5lib/python3.9/site-packages/daal4py/sklearn/_utils.pyset_idp_sklearn_verbose   s    
r   c                 C   s   t t dd t dd t t dd f}t| d t|sP| |kr|dS n,| D ]&}||krf dS |d |d krT q|qTdS )Nr      
         FT)intdv
isinstancetype)ZruletargetZ	rule_itemr   r   r   daal_check_version)   s    0r   c                 C   s   t ttt| kS N)boolr   sklearn_version)Zverr   r   r   sklearn_check_version:   s    r"   c                   C   s0   t t dd t dd t t dd fS )Nr   r   r   r   r   )r   r   r   r   r   r   get_daal_version>   s    r#   c                 C   s.   | t jkrdS | t jkrdS td|  d S )Ndoublefloatz#Input array has unexpected dtype = )npr$   Zsingle
ValueError)dtr   r   r   parse_dtypeB   s
    

r)   c                 C   sf   z>ddl m} ddlm} t| |r<|| j }t|W S W n tyP   Y n0 t	| dd }t|S )Nr   	DataFramefind_common_typedtype)
pandasr+   pandas.core.dtypes.castr-   r   dtypestolistr)   ImportErrorgetattr)Xr+   r-   r(   r   r   r   	getFPTypeJ   s    
r6   c                 C   sL   t | r"t | t jt jf } n&t| t jrH| jdkrH| | jdf} | S )N   )	r&   ZisscalarZasarrayZnewaxisr   ZndarrayndimZreshapesize)r5   r   r   r   make2dX   s
    
r:   c                 C   s   | dkrxd}dt jv rnddlm} | }|dks@|dks@|d u rJ|d7 }qv|d	kr\|d
7 }qvtd| dq|d7 }n*| dkrd}n| dkrd}ntd|  |S )Ndaalzrunning accelerated version on zdaal4py.oneapir   )_get_device_name_sycl_ctxtZcpuZhostZCPUZgpuZGPUzUnexpected device name z'. Supported types are host, cpu and gpusklearnz!fallback to original Scikit-learnZsklearn_after_daalzDfailed to run accelerated version, fallback to original Scikit-learnzLInvalid input - expected one of 'daal','sklearn', 'sklearn_after_daal', got )r   modulesdaal4py.oneapir<   r'   )smessager<   Zdevr   r   r   get_patch_message`   s*    



rB   c                  C   s.   zddl m}  |  W S  ty(   Y dS 0 d S )Nr   )is_in_sycl_ctxtF)r?   rC   ModuleNotFoundError)Z	is_in_ctxr   r   r   rC   {   s
    rC   c                 C   s2   zddl m} t| |W S  ty,   Y dS 0 d S )Nr   r*   F)r/   r+   r   r3   )r5   r+   r   r   r   is_DataFrame   s
    rE   c                 C   sJ   z&ddl m} t| r || jn| jW S  tyD   t| dd  Y S 0 d S )Nr   r,   r.   )r0   r-   rE   r1   r.   r3   r4   )r5   r-   r   r   r   	get_dtype   s
    rF   c                 C   s4   t | dd }ztt|W S  ty.   Y dS 0 d S )Nr1   r7   )r4   lenset	TypeError)Z	dataframer1   r   r   r   get_number_of_types   s
    rJ   c                   @   sD   e Zd Zdd Zdd ZefddZefddZd	d
 Zdd Z	dS )PatchingConditionsChainc                 C   s   || _ d| _g | _d S )NT)
scope_namepatching_is_enabledmessages)selfrL   r   r   r   __init__   s    z PatchingConditionsChain.__init__c                 C   s0   g }|D ]"\}}| | |s| j | q|S r   )appendrN   )rO   conditions_and_messagesresultZ	conditionrA   r   r   r   _iter_conditions   s    
z(PatchingConditionsChain._iter_conditionsc                 C   s   |  j || |M  _ | j S r   rM   rT   rO   rR   Zconditions_mergingr   r   r   and_conditions   s    z&PatchingConditionsChain.and_conditionsc                 C   s   |  j || |O  _ | j S r   rU   rV   r   r   r   or_conditions   s    z%PatchingConditionsChain.or_conditionsc                 C   s   | j S r   )rM   )rO   r   r   r   
get_status   s    z"PatchingConditionsChain.get_statusc                 C   st   | j r"t| j dtd  nNt| j d | jD ]}t| j d|  q:t| j dtd  d S )Nz: r;   ui   : debugging for the patch is enabled to track the usage of Intel® oneAPI Data Analytics Library (oneDAL)z: patching failed with cause - r=   )rM   r   inforL   rB   debugrN   )rO   rA   r   r   r   	write_log   s    

z!PatchingConditionsChain.write_logN)
__name__
__module____qualname__rP   rT   allrW   rX   rY   r\   r   r   r   r   rK      s   rK   )Znumpyr&   r   Zdaal4pyr   r   r=   r   r!   Zdistutils.versionr   r   r   r   r"   r#   r)   r6   r:   rB   rC   rE   rF   rJ   rK   r   r   r   r   <module>   s$   