
    ^j_                     D   d Z ddlZ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 ddlmZmZ ddlmZ ddlmZ  G d d	e      Zed
edefd       Zed
ee   dej2                  fd       Zd
e
eee   f   de
eej2                  f   fdZd
ededee   fdZdedefdZdeddfdZdefdZdej<                  de	eeef   fdZ defdZ!dej<                  ddfdZ"dede	e	eeef   ef   fdZ#dej<                  fdZ$ e$       Z%deddfdZ&dedejN                  fd Z(y)!z.Low-level ctypes bridge for the XGBoost C API.    N)AnyCallableListTupleUnioncastoverload   )CStrPptrc_bst_ulong)py_str)find_lib_pathc                       e Zd ZdZy)XGBoostErrorz Error thrown by xgboost trainer.N)__name__
__module____qualname____doc__     Y/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/xgboost/_c_api.pyr   r      s    *r   r   datareturnc                      y Nr   r   s    r   from_pystr_to_cstrr      s    ,/r   c                      y r   r   r   s    r   r   r      s    9<r   c                     t        | t              rt        | d      S t        | t              r9| D cg c]  }t        |d       }}t	        j
                  t        |      z  | }|S t               c c}w )z8Convert a Python str or list of Python str to C pointer.utf-8)
isinstancestrbyteslistctypesc_char_plen	TypeError)r   ddata_as_bytespointerss       r   r   r      sm    $T7##$AE%FAeAw&7%F%FOOc-003 
+ &Gs   A0lengthc                 F   g }t        |j                        D ]=  }	 |j                  t        t	        t
        | |         j                  d                   ? |S # t        $ r= |j                  t        t	        t
        | |         j                  d                   Y w xY w)zRevert C pointer to Python str.asciir    )rangevalueappendr"   r   r#   decodeUnicodeDecodeError)r   r,   resis       r   from_cstr_to_pystrr6   '   s    
C6<<  B	BJJs4tAw/66w?@AB
 J " 	BJJs4tAw/66w?@A	Bs   :AAB B kwargsc                  >    t        t        j                  |             S )z*Make JSON-based arguments for C functions.)r   jsondumps)r7   s    r   make_jcargsr;   2   s    djj011r   msgc                     t        |       }|j                  d      dk7  rt        j                  |t        d       yt        |       y)z6Redirect logs from native library into Python console.zWARNING:   )
stacklevelN)r   findwarningswarnUserWarningprint)r<   smsgs     r   _log_callbackrG   7   s8    #;Dyy"
 	dKA6	$Kr   c                  b    t        j                  dt         j                        }  | t              S )z3Wrap log_callback() method in ctypes callback type.N)r%   	CFUNCTYPEr&   rG   )
c_callbacks    r   _get_log_callback_funcrK   D   s#    !!$8Jm$$r   libc                 X   t        j                         }t        j                         }t        j                         }| j                  t        j                  |      t        j                  |      t        j                  |             |j                  |j                  |j                  fS )z2Get the XGBoost version from native shared object.)r%   c_intXGBoostVersionbyrefr0   )rL   majorminorpatchs       r   _lib_versionrT   J   si    LLNELLNELLNEv||E*FLL,?eATU;;U[[00r   c                     t         j                  j                  t         j                  j                  t              d      } t        | d      5 }|j                         j                         cddd       S # 1 sw Y   yxY w)z1Get the XGBoost version from Python version file.VERSIONr.   )encodingN)ospathjoindirname__file__openreadstrip)version_filefs     r   _py_versionrb   S   sT    77<< 99EL	lW	-  vvx~~     s   A77B c                     t         j                  | j                  _        t	               | _        | j                  | j
                        dk7  rt        | j                               y )Nr   )r%   r&   XGBGetLastErrorrestyperK   callbackXGBRegisterLogCallbackr   )rL   s    r   _register_log_callbackrh   Z   sN    "(//C)+CL
!!#,,/143..011 5r   verc                    | j                  d      dk7  r-| j                  d      dd \  }}}| j                  d      d   }nfd| v r*| j                  d      d   j                  d      \  }}}d}n8| j                  d      \  }}}|j                  d	      }|dk7  r||d }|d| }nd
}t        |      t        |      t        |      f|fS )z(Avoid dependency on packaging (PEP 440).postr>   .Nz-dev-r   devrc )rA   splitint)ri   rQ   rR   rS   postfixro   s         r   _parse_versionrt   a   s     xx2!iinSb1ue))C.$	3!iinQ/55c:ue!iinueZZ8BCjG#2JEGJE
CJ/88r   c                     t               } | sy	 t        j                  d   j                  t        j                        }d}g }| D ]  }	 t        j                  j                  |t        j                  j                  |      gz         t        j                  d<   t        j                  j                  |      }t        |dt        j                  j                  |             d}	 t        j                  j                  |      t        j                  d<    n |s4t        j                  j#                  | d         }t%        d| d| d	      t'               t)        |      }t+        t-                     \  }	}
|	|k7  rQd
j                  d |	D              }d
j                  d |D              }d| d| d|j                   d}t/        |      |S # t
        $ r g }Y w xY w# t        $ rU}|j                  t!        |             Y d}~t        j                  j                  |      t        j                  d<   d}~ww xY w# t        j                  j                  |      t        j                  d<   w xY w)zLoad xgboost library.NPATHFrY   Tr   z
XGBoost Library (aZ  ) could not be loaded.
Likely causes:
  * OpenMP runtime is not installed
    - vcomp140.dll or libgomp-1.dll for Windows
    - libomp.dylib for Mac OSX
    - libgomp.so for Linux and other UNIX-like OSes
    Mac OSX users: Run `brew install libomp` to install OpenMP runtime.

  * You are running 32-bit Python on a 64-bit OS

Error message(s): 
rl   c              3   2   K   | ]  }t        |        y wr   r"   .0vs     r   	<genexpr>z_load_lib.<locals>.<genexpr>   s     4c!f4   c              3   2   K   | ]  }t        |        y wr   ry   rz   s     r   r}   z_load_lib.<locals>.<genexpr>   s     6!s1v6r~   zeMismatched version between the Python package and the native shared object.  Python package version: z. Shared object version: z . Shared object is loaded from: z.
Likely cause:
  * XGBoost is first installed with anaconda then upgraded with pip. To fix it please remove one of the installations.)r   rX   environrq   pathsepKeyErrorrZ   rY   r[   r%   cdllLoadLibrarysetattrnormpathOSErrorr1   r"   basenamer   rh   rT   rt   rb   
ValueError)	lib_pathspath_backuplib_successos_error_listlib_pathrL   elibnamelibverpyver_	pyver_str
libver_strr<   s                 r   	_load_libr   v   s1   Ijj(..rzz: KM >	> "$rwwx899"BJJv ++))(3CC!1!1(!;<K
 "$!=BJJv>  ''""9Q<0   
 !/ "  	 3#Fkm,HE1 HH4e45	XX6v67
22; =$%EchhZ P66 	 oJm    	  Q(!#!=BJJv		 "$!=BJJvs<   0G 	BG%G"!G"%	I.H>I>II2I8retc                 Z    | dk7  r&t        t        t        j                                     y)z%Check the return value of C API call.r   N)r   r   _LIBrd   )r   s    r   _check_callr      s'    
ax6$"6"6"89:: r   stringc                 J    t        j                  | j                  d            S )z#Convert a python string to cstring.r    )r%   r&   encode)r   s    r   c_strr      s    ??6==122r   ))r   r%   r9   rX   rB   typingr   r   r   r   r   r   r	   _typingr   r   compatr   libpathr   r   r   r"   r#   r   Arrayr6   r;   rG   rK   CDLLrr   rT   rb   rh   rt   r   r   r   r&   r   r   r   r   <module>r      s   4   	  D D D *  "+: + 
 /S /U / 
 / 
 <T#Y <6<< < 
 <
U3S	>2 
uUFLL=P7Q 
X { tCy 2# 2% 2

u 
 
% %1fkk 1eCcM&: 1 S  2 2 29 9eCcM&:C&? @ 9*>6;; >D {;S ;T ;3# 3&// 3r   