
    Mpj                        S SK rS SKrS SKJr  S SKJr  S SKJrJ	r	J
r
JrJr  S SKJrJrJr  S SKJr  \" \R(                  " 5       5      rS r\R.                  R1                  S\
" S S	S
S
5      \
" S S	S
S5      \
" S S	SS
5      \
" S S	SS5      \
" \" S5      * \" S5      S
S
5      \
" \" S5      * \" S5      S
S5      \
" \" S5      * \" S5      SS
5      \
" \" S5      * \" S5      SS5      \
" SSS
S
5      \
" SSS
S5      \
" SSSS
5      \
" SSSS5      /5      S 5       r\R.                  R1                  S\5      S 5       r\R.                  R1                  S\" 5       5      \R.                  R1                  S\5      S 5       5       rg)    N)assert_allclose)config_context)_LINKSHalfLogitLinkIntervalMultinomialLogit_inclusive_low_high)_atol_for_typemove_to)yield_namespace_device_dtype_combinations)_array_api_for_testsc                      [         R                  " [        SS9   [        SSSS5        SSS5        g! , (       d  f       g= f)z5Test that interval with low > high raises ValueError.z-One must have low <= high; got low=1, high=0.)match   r   FN)pytestraises
ValueErrorr        Y/var/www/html/pdf-tiff/venv/lib/python3.13/site-packages/sklearn/_loss/tests/test_link.pytest_interval_raisesr      s4    	I
 	Aue$
 
 
s	   2
A intervalr   FTinfc                 "   [        U 5      u  p[        R                  " XSS9nU R                  U5      (       d   eU R                  [        R                  X0R
                  4   5      U R                  :X  d   eU R                  [        R                  X0R                  4   5      U R                  :X  d   eU R                  [        R                  X0R
                  U R                  4   5      U R                  =(       a    U R                  :X  d   eg)zHTest that low and high are always within the interval used for linspace.
   )numN)	r	   nplinspaceincludesr_lowlow_inclusivehighhigh_inclusive)r   r#   r%   xs       r   test_is_in_ranger(      s    & $H-IC
C2&AQ RUU1ll?348N8NNNN RUU1mm#3459P9PPPP RUU1llHMM#ABC:8#:#:  r   linkc                 *   [         R                  R                  U5      nU " 5       n Su  p4U R                  (       a;  SnUR	                  SSX44S9n[        U [        5      (       a  U R                  U5      nO8[        U [        5      (       a  UR	                  SSUS9nOUR	                  SSUS9n[        U R                  U R                  U5      5      U5        U R                  U5      n[        U R                  U R                  U5      5      U5        g)z)Test that link of inverse gives identity.d   Nr      r#   r%   sizer   N)r   randomRandomStateis_multiclassuniform
isinstancer   symmetrize_raw_predictionr   r   r)   inverse)r)   global_random_seedrng	n_samples	n_classesraw_predictiony_preds          r   test_link_inverse_identityr>   C   s     ))

 2
3C6D$I 	2Y<RSd,--!;;NKN	D-	(	(2YH2YHDIIdll>:;^L\\.)FDLL6!23V<r   z"namespace, device_name, dtype_namec           	         [         R                  R                  U5      nU" 5       nSu  pgUR                  (       a;  SnUR	                  SSXg4S9n[        U[        5      (       a  UR                  U5      nO8[        U[        5      (       a  UR	                  SSUS9nOUR	                  SSUS9n[        XU5      u  pUS:w  a  US-  nU(       a  S	OS
nOSn[        U5      n[        SS9   U	R                  UR                  U5      U
S9n[        [        UR!                  U5      [         SS9UR!                  U5      US9  UR!                  U5      nU	R                  UR                  U5      U
S9n[        [        UR#                  U5      [         SS9UR#                  U5      UUS9  SSS5        g! , (       d  f       g= f)zFTest that link and inverse link give same result for array API inputs.r+   r   r-   r.   r/   r   float64g      ?gMbP?g-C6?g:0yE>T)array_api_dispatch)devicecpu)xprB   )rtol)rE   atolN)r   r1   r2   r3   r4   r5   r   r6   r   r   r
   r   asarrayastyper   r   r7   r)   )	namespacedevice_name
dtype_namer)   r8   r9   r:   r;   r<   rD   rB   rE   rF   raw_prediction_xpr=   	y_pred_xps                   r   test_link_inverse_array_apirN   [   s    ))

 2
3C6D$I 	2Y<RSd,--!;;NKN	D-	(	(2YH2YH%ijIJBY# td*%D	4	0JJ~'<'<Z'HQWJXDLL!235ILL(	
 n-JJv}}Z8JH	DIIi(R>IIf		
 
1	0	0s   *B=F00
F>)numpyr   r   numpy.testingr   sklearnr   sklearn._loss.linkr   r   r   r   r	   sklearn.utils._array_apir
   r   r   sklearn.utils._testingr   listvaluesLINK_FUNCTIONSr   markparametrizefloatr(   r>   rN   r   r   r   <module>r[      s     ) "  
 8fmmo&% Aue$Aud#AtU#AtT"%,eeU;%,eeT:%,edE:%,edD9b%'b%&b$&b$%"#"& 0= 1=. (-/ 0+
 1	
+
r   