
    bi=                        d 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mZ ddlZddlmZmZmZ ddlmZ  G d de      Z G d	 d
e      Z G d de      Z e
deeef   eed   eeedf      eedf   eddef   d      ZdedefdZdedefdZd!dededefdZdeeef   deedf   de	ej@                     dedef
dZ!dejD                  defdZ#dejD                  defdZ$dededdfd Z%y)"z+Helpers for interfacing array like objects.    N)LiteralOptionalProtocolTupleType	TypedDictUnioncast   )CNumericPtrDataTypeNumpyOrCupy)import_cupyc                       e Zd Zedd       Zy)_ArrayLikeArgc                      y N selfs    N/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/xgboost/_data_utils.py__array_interface__z!_ArrayLikeArg.__array_interface__   s    14    NreturnArrayInf)__name__
__module____qualname__propertyr   r   r   r   r   r      s    4 4r   r   c                       e Zd Zedd       Zy)_CudaArrayLikeArgc                      y r   r   r   s    r   __cuda_array_interface__z*_CudaArrayLikeArg.__cuda_array_interface__   s    69r   Nr   )r   r   r   r    r$   r   r   r   r"   r"      s    9 9r   r"   c                   <    e Zd ZdZdefdZedeeef   fd       Z	y)TransformedDfz1Protocol class for storing transformed dataframe.r   c                      y)z,Get a JSON-encoded list of array interfaces.Nr   r   s    r   array_interfacezTransformedDf.array_interface       r   c                      y)z"Return the shape of the dataframe.Nr   r   s    r   shapezTransformedDf.shape   r)   r   N)
r   r   r   __doc__bytesr(   r    r   intr+   r   r   r   r&   r&      s4    ;; ; 1uS#X 1 1r   r&   r      .)datatypestrversionstridesr+   maskr0   r   c                 ^    t        | j                  d      xr | j                  j                  S )z)Whether the numpy array has object dtype.	hasobject)hasattrdtyper6   )r0   s    r   array_hasobjectr9   0   s"    4::{+D

0D0DDr   c                     t        |       rt        d      | j                  }d|v r|d   j                  |d<   t        t	        j
                  |      d      }|S )zMake cuda array interface str.<Input data contains `object` dtype.  Expecting numeric data.r4   utf-8)r9   
ValueErrorr$   r-   jsondumpsr0   	interfaceinterface_strs      r   cuda_array_interfacerC   5   sY    tWXX--I%f-FF	&$**Y/9Mr   rA   	zero_copyc                      G d d      } |       }d| v r%| |_         t               j                  ||       }|S | |_        t	        j                  ||       }|S )z.Convert array interface to numpy or cupy arrayc                       e Zd ZU dZdZee   ed<   edee   fd       Z	e	j                  deddfd       Z	edee   fd       Zej                  deddfd	       Zy)
#from_array_interface.<locals>.Arrayz3Wrapper type for communicating with numpy and cupy.N
_interfacer   c                     | j                   S r   )rH   r   s    r   r   z7from_array_interface.<locals>.Array.__array_interface__H   s    ??"r   rA   c                 R   t        j                   |      | _        t        | j                  d         | j                  d<   | j                  d   d   | j                  d   d   f| j                  d<   | j                  j                  dd       }|t        |      | j                  d<   y y )Nr+   r0   r   r   r3   )copyrH   tupleget)r   rA   r3   s      r   r   z7from_array_interface.<locals>.Array.__array_interface__L   s    "ii	2DO',T__W-E'FDOOG$'*'*'DOOF# oo)))T:G"-27^	* #r   c                     | j                   S r   r   r   s    r   r$   z<from_array_interface.<locals>.Array.__cuda_array_interface__Y   s    +++r   c                     || _         y r   rO   )r   rA   s     r   r$   z<from_array_interface.<locals>.Array.__cuda_array_interface__]   s
    '0D$r   )r   r   r   r,   rH   r   r   __annotations__r    r   setterr$   r   r   r   ArrayrG   C   s    A)-
HX&-		#(); 	# 
	# 
	#	#
	< 
	<d 
	< 
$
	< 
	,hx.@ 	, 
	, 
"	(	(	1h 	14 	1 
)	1r   rS   stream)rK   )r$   r   arrayr   np)rA   rD   rS   arrouts        r   from_array_interfacerY   @   sf    1 1< 'C9'0$m!!#	M!:
 J #,hhsY/Jr   ptrr+   r8   is_cudac                    |r(t               j                  d|      }|j                  }n#t        j                  d|      }|j                  }t        | t              s/t        j                  | t        j                        j                  }n| }t        t        j                  |            }||dk(  sJ ||S |df|d<   |rd|d<   ||d	<   d|d
<   |S )z2Make an __(cuda)_array_interface__ from a pointer.)r   )r+   r8   Nr   Tr0      rT   r+   r3   )r   emptyr$   rV   r   
isinstancer.   ctypesr
   c_void_pvalueprod)rZ   r+   r8   r[   r^   rU   addrlengths           r   make_array_interfacerf   n   s     ##$e#<..t51))c3{{3066 Fv{**|4LE&MhE'NE)Lr   c                     t        |       rt        d      | j                  }d|v r|d   j                  |d<   t        t        |      S )z1Convert array interface into a Python dictionary.r;   r4   )r9   r=   r   r
   r   )r0   arrinfs     r   array_interface_dictri      sI    tWXX%%F;;v&!!r   c                 Z    t        |       }t        t        j                  |      d      }|S )zMake array interface str.r<   )ri   r-   r>   r?   r@   s      r   r(   r(      s'    $T*I$**Y/9Mr   fieldc                 \    d| j                   v r| j                   d   t        d|       yy)z(Make sure no missing value in meta data.r4   Nz"Missing value is not allowed for: )r$   r=   )r0   rk   s     r   check_cudf_metarm      s@     	$///))&1==eWEFF > 	0r   )F)&r,   rK   r`   r>   typingr   r   r   r   r   r   r	   r
   numpyrV   _typingr   r   r   compatr   r   r"   r&   r.   boolstrr   r9   r-   rC   rY   numberrf   ndarrayri   r(   rm   r   r   r   <module>rv      s}   1    S S S  7 7 5H 5
: :
1H 1 c4i 1:E#s(O,sCxj$56
E( Et E
x E +H + ++ +\	{C	 c? 		? 	
 D"rzz "h ""**  G+ GC GD Gr   