Ë
    8Ò^j¨  ã                   ó  — d dl Zd dlZd dlmZ d dlmZ d dlmZm	Z	m
Z
mZmZ d dlmZmZmZ d dlmZ  e ej(                  «       «      Zd„ Zej.                  j1                  d e
d d	d
d
«       e
d d	d
d«       e
d d	dd
«       e
d d	dd«       e
 ed«        ed«      d
d
«       e
 ed«        ed«      d
d«       e
 ed«        ed«      dd
«       e
 ed«        ed«      dd«       e
ddd
d
«       e
ddd
d«       e
dddd
«       e
dddd«      g«      d„ «       Zej.                  j1                  de«      d„ «       Zej.                  j1                  d e«       «      ej.                  j1                  de«      d„ «       «       Zy)é    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                  ó€   — t        j                  t        d¬«      5  t        dddd«       ddd«       y# 1 sw Y   yxY w)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   © ó    úh/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/sklearn/_loss/tests/test_link.pyÚtest_interval_raisesr      s9   € ä	�‰ÜÐIô
ñ %ô 	��A�u˜eÔ$÷%÷ %ñ %ús   œ4´=Úintervalr   FTÚinféöÿÿÿéÿÿÿÿc                 ó  — t        | «      \  }}t        j                  ||d¬«      }| j                  |«      sJ ‚| j                  t        j                  || j
                  f   «      | j                  k(  sJ ‚| j                  t        j                  || j                  f   «      | j                  k(  sJ ‚| j                  t        j                  || j
                  | j                  f   «      | j                  xr | j                  k(  sJ ‚y)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Ó-�I€CˆÜ
�‰�C˜ 2Ô&€Aà×Ñ˜QÔÐÐð ×ÑœRŸU™U 1 h§l¡l ?Ñ3Ó4¸×8NÑ8NÒNÐNÐNð ×ÑœRŸU™U 1 h§m¡mÐ#3Ñ4Ó5¸×9PÑ9PÒPÐPÐPð ×ÑœRŸU™U 1 h§l¡l°H·M±MÐ#AÑBÓCØ×ÑÒ: 8×#:Ñ#:òð ñ r   Úlinkc                 ó"  — t         j                  j                  |«      } | «       } d\  }}| j                  r:d}|j	                  dd||f¬«      }t        | t        «      rK| j                  |«      }n9t        | t        «      r|j	                  dd|¬«      }n|j	                  dd|¬«      }t        | j                  | j                  |«      «      |«       | j                  |«      }t        | j                  | j                  |«      «      |«       y)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Ó
3€CÙ‹6€DØ$Ñ€Iˆyð ×ÒØˆ	ØŸ™¨°2¸YÈ	Ð<R˜ÓSˆÜ�dÔ,Ô-Ø!×;Ñ;¸NÓK‰NÜ	�Dœ-Ô	(ØŸ™¨°2¸Y˜ÓH‰àŸ™¨°2¸Y˜ÓHˆä�D—I‘I˜dŸl™l¨>Ó:Ó;¸^ÔLØ�\‰\˜.Ó)€FÜ�D—L‘L §¡¨6Ó!2Ó3°VÕ<r   z"namespace, device_name, dtype_namec                 ó’  — t         j                  j                  |«      } |«       }d\  }}|j                  r:d}|j	                  dd||f¬«      }t        |t        «      rK|j                  |«      }n9t        |t        «      r|j	                  dd|¬«      }n|j	                  dd|¬«      }t        | ||«      \  }	}
|dk7  r|dz  }|rd	nd
}nd}t        |«      }t        d¬«      5  |	j                  |j                  |«      |
¬«      }t        t        |j!                  |«      t         d¬«      |j!                  |«      |¬«       |j!                  |«      }|	j                  |j                  |«      |
¬«      }t        t        |j#                  |«      t         d¬«      |j#                  |«      ||¬«       ddd«       y# 1 sw Y   yxY w)zFTest that link and inverse link give same result for array API inputs.r+   r   r-   r.   r/   r   Úfloat64g      à?gü©ñÒMbP?g-Cëâ6?g:Œ0âŽyE>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Ó
3€CÙ‹6€DØ$Ñ€Iˆyð ×ÒØˆ	ØŸ™¨°2¸YÈ	Ð<R˜ÓSˆÜ�dÔ,Ô-Ø!×;Ñ;¸NÓK‰NÜ	�Dœ-Ô	(ØŸ™¨°2¸Y˜ÓH‰àŸ™¨°2¸Y˜ÓHˆä% i°¸jÓI�J€BˆØ�YÒØ˜#ÑˆÙ ‰t d‰àˆÜ˜*Ó%€Dä	¨4Ô	0ñ 
ØŸJ™J ~×'<Ñ'<¸ZÓ'HÐQW˜JÓXÐÜÜ�D—L‘LÐ!2Ó3¼À5ÔIØ�L‰L˜Ó(Øõ	
ð —‘˜nÓ-ˆØ—J‘J˜vŸ}™}¨ZÓ8À�JÓHˆ	ÜÜ�D—I‘I˜iÓ(¬R¸Ô>Ø�I‰I�fÓØØõ		
÷
÷ 
ñ 
ús   Ã%CF=Æ=G)Ú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á�m�f—m‘m“oÓ&€ò%ð ‡�×ÑØá��A�u˜eÓ$Ù��A�u˜dÓ#Ù��A�t˜UÓ#Ù��A�t˜TÓ"Ù‘%˜“,�¡ e£¨e°UÓ;Ù‘%˜“,�¡ e£¨e°TÓ:Ù‘%˜“,�¡ e£¨d°EÓ:Ù‘%˜“,�¡ e£¨d°DÓ9Ù��b˜% Ó'Ù��b˜% Ó&Ù��b˜$ Ó&Ù��b˜$ Ó%ðóñ"ó#ð"ð& ‡�×Ñ˜ Ó0ñ=ó 1ð=ð. ‡�×ÑØ(Ù-Ó/óð ‡�×Ñ˜ Ó0ñ+
ó 1ó	ñ
+
r   