§
    qŠtj¿Ù  ã                   ó€  — d dl Z d dlZd dlZd dlZd dlmZmZ d dlmZ d dl	m
Z
mZmZmZ d dlmZ d dlmZ d dlmZ d dlmZmZ d d	lmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z( d d
l)m*Z* d dl+m,Z,m-Z-m.Z. d dl+m/Z0 d dl1m2Z2m3Z3m4Z4  e5 ej6        ¦   «         ¦  «        Z7d„ e7D ¦   «         Z8e8 e'd¬¦  «         e&d¬¦  «         e$d¬¦  «         e$d ¬¦  «         e$d¬¦  «         e$d¬¦  «         e$d¬¦  «         e%d ¬¦  «         e%d¬¦  «         e%d¬¦  «         e%d¬¦  «        gz  Z8d„ Z9	 d¡d„Z:d„ Z;ej<         =                    de8e9¬¦  «        d„ ¦   «         Z> e#¦   «         g d ¢ej?         ej?        gf e¦   «         g d ¢ej?         ej?        gf e'¦   «         g d ¢ej?         ej?        gf e&¦   «         g d ¢ej?         ej?        gf e!¦   «         d!d"gej?         d#d$ej?        gf e¦   «         d!d"gej?         d#d$d ej?        gf e$d#¬¦  «        d!d"gej?         ej?        gf e$d ¬¦  «        d!d"gej?         ej?        gf e$d%¬¦  «        d!d"gej?         d#d$ej?        gf e$d¬¦  «        d!d"gej?         d#d$d ej?        gf e$d&¬¦  «        d!d"gej?         d#d$d ej?        gf e%d#¬¦  «        d!d"gej?         ej?        gf e%d ¬¦  «        g d'¢ej?         ej?        gf e%d%¬¦  «        d!d"gej?         d#d$ej?        gf e%d¬¦  «        d!d"gej?         d#d$d ej?        gf e%d&¬¦  «        d!d"gej?         d#d$d ej?        gf e¦   «         g d(¢ej?         d)dej?        gf e¦   «         g ej?         d)d*ej?        gfgZ@ e!¦   «         d gg f e&¦   «         d gg f e$d#¬¦  «        g d+¢g f e$d ¬¦  «        d,d gg f e$d%¬¦  «        d gg f e%d#¬¦  «        g d+¢g f e%d ¬¦  «        d,d gg f e%d%¬¦  «        d gg f e¦   «         d dgg f e¦   «         g d-¢g fg
ZA e!¦   «         g d gf e$d#¬¦  «        g g d.¢f e$d ¬¦  «        g g d.¢f e$d%¬¦  «        g d gf e%d#¬¦  «        g g d.¢f e%d ¬¦  «        g d.¢g f e%d%¬¦  «        g d gf e¦   «         g d dgf e¦   «         d!d/gd dgfg	ZBej<         =                    d0e@eAz   ¦  «        d1„ ¦   «         ZCej<         =                    d2e@eBz   ¦  «        d3„ ¦   «         ZDej<         =                    d4g  e#¦   «         d5d6d7d8df‘ e¦   «         d5d6d9d5df‘ e'd/¬¦  «        d5d6dd/df‘ e'd¬¦  «        d5d6dddf‘ e'd¬¦  «        d6d5d5d:df‘ e&d/d&¬;¦  «        d5d6d<ddf‘ e&d/d&¬;¦  «        d5dd=ddf‘ e!¦   «         d= ejE        d8¦  «        d8d ejE        d8¦  «        z  z
  dd8f‘ e¦   «         d= ejE        d8¦  «         ejE        d8¦  «        d/z   d/d/f‘ e$d&¬¦  «        d= ejE        d8¦  «        d>ddf‘ e%d¬¦  «        d=d9dd ejE        d¦  «        z  z
  ddf‘ e%d¬¦  «        d=d9 ejE        d¦  «        d/z
  ddf‘ e%d&¬¦  «        d=d9d?ddf‘ e¦   «         d ejE        d8¦  «         ejF        d8¦  «        d ejE        d8¦  «        z  z
  ddf‘ e¦   «         d@dAd d d f‘ e¦   «         d5dAdBd)d f‘ e¦   «         d@dCd d d f‘ e¦   «         d5dCdDd)d f‘ e¦   «         d5dEdFd)d f‘ e¦   «         d5dGdHdIdJf‘ e¦   «         d@dGgdJgd&z  ¢R ‘ e¦   «         d5dKdLdIdMf‘ e¦   «         d@dKgdMgd&z  ¢R ‘ e¦   «         d@dNdHdOdJf‘ e¦   «         d5dNgdPgd&z  ¢R ‘ e¦   «         d@dFdFddQf‘ e¦   «         d@dRdRddSf‘ e¦   «         d5dBd d d f‘ e¦   «         d@dBdBdd f‘ e¦   «         d5dRd dTdSf‘ e¦   «         d5dUd d d f‘ e¦   «         d5dDd d d f‘ e¦   «         d@dDdDdd f‘ ed&¬V¦  «        d@g dW¢ eg dW¢¦  «        dXz
  ddf‘ ed&¬V¦  «        d5g dW¢ eg dW¢¦  «        d/z
  ddf‘ ed&¬V¦  «        d=g dW¢ eg dW¢¦  «        dYz
  ddf‘ ed&¬V¦  «        d=g dZ¢ eg dZ¢¦  «        d[z
  ddf‘e9¬¦  «        d\„ ¦   «         ZGej<         =                    de7¦  «        ej<         =                    d]d^d_g¦  «        ej<         =                    d`ejH        ejI        g¦  «        ej<         =                    daejH        ejI        g¦  «        ej<         =                    dbddg¦  «        ej<         =                    dcddg¦  «        ej<         =                    ddddg¦  «        ej<         =                    deddg¦  «        df„ ¦   «         ¦   «         ¦   «         ¦   «         ¦   «         ¦   «         ¦   «         ¦   «         ZJej<         =                    de8e9¬¦  «        ej<         =                    dbddgg¦  «        dh„ ¦   «         ¦   «         ZKej<         =                    de8e9¬¦  «        ej<         =                    dbddgg¦  «        di„ ¦   «         ¦   «         ZLej<         =                    de8e9¬¦  «        ej<         =                    dbdjdkg¦  «        dl„ ¦   «         ¦   «         ZMej<         =                    de8e9¬¦  «        dm„ ¦   «         ZNej<         =                    de8e9¬¦  «        ej<         =                    dbddgg¦  «        dn„ ¦   «         ¦   «         ZOej<         =                    de8e9¬¦  «        ej<         =                    dbddgg¦  «        do„ ¦   «         ¦   «         ZPej<         =                    dpg dq¢¦  «        e4dr„ ¦   «         ¦   «         ZQej<         =                    de8e9¬¦  «        ej<         =                    dbddgg¦  «        ds„ ¦   «         ¦   «         ZRej<         =                    dt e#¦   «         ejS        duf e¦   «         ejT        duf e'd¬¦  «        dv„ duf e!¦   «         ejS        dwf e¦   «         ejS        dxf e$¦   «         ejS        dxf e¦   «         ejS        dyfg¦  «        dz„ ¦   «         ZUd{„ ZVd|„ ZWd}„ ZXej<         =                    d~ ejY        g d¢¦  «         ejY        g d€¢¦  «        f¦  «        ej<         =                    d� ejY        g d‚¢¦  «         ejY        g dƒ¢¦  «        f¦  «        d„„ ¦   «         ¦   «         ZZej<         =                    de8e9¬¦  «        d…„ ¦   «         Z[ej<         =                    de7¦  «        ej<         =                    dbddgg¦  «        ej<         =                    d†ejH        ejI        f¦  «        ej<         =                    d‡dˆ¦  «        d‰„ ¦   «         ¦   «         ¦   «         ¦   «         Z\ej<         =                    de7¦  «        ej<         =                    dŠd†ej]        id‹ej]        › dŒ�fg¦  «        d�„ ¦   «         ¦   «         Z^ej<         =                    dŽe'd�die_d�fe'd�d ie`d‘fe'd�d*ie`d’fe&d�die_d�fe&d�d ie`d‘fe&d�d*ie`d’fg¦  «        d“„ ¦   «         Zaej<         =                    de8e9¬¦  «        d”„ ¦   «         Zbej<         =                    d•g d–¢¦  «        d—„ ¦   «         Zcej<         =                    d˜eefe efe"e!fgg d™¢¬¦  «        ej<         =                    dšg d›¢¦  «        ej<         =                    dœd^d_g¦  «        ej<         =                    d� e.¦   «         ¦  «        dž„ ¦   «         ¦   «         ¦   «         ¦   «         Zdej<         =                    d� e.¦   «         ¦  «        dŸ„ ¦   «         Zed „ ZfdS )¢é    N)Úassert_allcloseÚassert_array_equal)Úapprox)ÚLinearConstraintÚminimizeÚminimize_scalarÚnewton)Ú	logsumexp)Úconfig_context)Ú_loss)ÚIdentityLinkÚ_inclusive_low_high)Ú_LOSSESÚAbsoluteErrorÚBaseLossÚHalfBinomialLossÚHalfBinomialLossArrayAPIÚHalfGammaLossÚHalfMultinomialLossÚHalfMultinomialLossArrayAPIÚHalfPoissonLossÚHalfPoissonLossArrayAPIÚHalfSquaredErrorÚHalfTweedieLossÚHalfTweedieLossIdentityÚ	HuberLossÚPinballLossÚ	_log1pexp)Úassert_all_finite)Ú_atol_for_typeÚmove_toÚ)yield_namespace_device_dtype_combinations©Údevice)Ú_array_api_for_testsÚcreate_memmap_backed_dataÚskip_if_32bitc                 ó"   — g | ]} |¦   «         ‘ŒS © r)   )Ú.0Úlosss     ú[/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sklearn/_loss/tests/test_loss.pyú
<listcomp>r-   6   s   € Ð0Ð0Ð0˜T�$�$‘&”&Ð0Ð0Ð0ó    g      Ð?)Úquantileg      è?ç      ø¿©Úpoweré   é   ç      @c                 ór  — t          | t          ¦  «        r”| }|j        j        }t          |t          ¦  «        r|d|j        j        › d�z  }n[t          |t          ¦  «        r|d|j        › �z  }n8t          |d¦  «        r(t          |j        d¦  «        r|d|j        j	        › d�z  }|S t          | ¦  «        S )Nz
(quantile=ú)Úclossr2   z(power=)Ú
isinstancer   Ú	__class__Ú__name__r   r8   r/   r   Úhasattrr2   Ústr)Úparamr+   Únames      r,   Úloss_instance_namer@   G   sÌ   € Ý�%�Ñ"Ô"ð ØˆØŒ~Ô&ˆÝ�d�KÑ(Ô(ð 	2ØÐ7 ¤Ô!4Ð7Ð7Ð7Ñ7ˆDˆDÝ˜�iÑ(Ô(ð 	2ØÐ0 ¤Ð0Ð0Ñ0ˆDˆDÝ�T˜7Ñ#Ô#ð 	2­°´
¸GÑ(DÔ(Dð 	2ØÐ1˜dœjÔ.Ð1Ð1Ð1Ñ1ˆDØˆå�5‰zŒzÐr.   ©éœÿÿÿéd   ©éûÿÿÿé   é*   c                 óØ  — t           j                             |¦  «        }| j        r‡t          j        || j        f¦  «        }|                     |d         |d         || j        z  ¬¦  «        |j        dd…<   t          j        |¦  «         	                    t          ¦  «        | j        z  }�n:t          | j        t          ¦  «        rSt          | j        ¦  «        \  }}	t          j        ||d         g¦  «        }t          j        |	|d         g¦  «        }	||	f}|                     |d         |d         |¬¦  «        }t          | j        ¦  «        \  }}	t'          ||d         ¦  «        }t)          |	|d         ¦  «        }	|                     ||	|¬¦  «        }| j        j        dk    r| j        j        rd|dd|dz  …<   | j        j        dk    r| j        j        rd|dd|dz  …<   ||fS )z9Random generate y_true and raw_prediction in valid range.r   r3   )ÚlowÚhighÚsizeN©rK   é   )ÚnpÚrandomÚRandomStateÚis_multiclassÚemptyÚ	n_classesÚuniformÚflatÚarangeÚastypeÚfloatr9   Úlinkr   r   Úinterval_y_predÚamaxÚaminÚinterval_y_trueÚmaxÚminrI   Úlow_inclusiverJ   Úhigh_inclusive)
r+   Ú	n_samplesÚy_boundÚ	raw_boundÚseedÚrngÚraw_predictionÚy_truerI   rJ   s
             r,   Úrandom_y_true_raw_predictionri   V   së  € õ Œ)×
Ò
 Ñ
%Ô
%€CØÔð .Ýœ 9¨d¬nÐ"=Ñ>Ô>ˆØ!$§¢Ø˜!”Ø˜1”Ø˜Tœ^Ñ+ð "-ñ "
ô "
ˆÔ˜A˜A˜AÑõ
 ”˜9Ñ%Ô%×,Ò,­UÑ3Ô3°d´nÑDˆ‰õ �d”i¥Ñ.Ô.ð 	$Ý+¨DÔ,@ÑAÔA‰IˆC�Ý”'˜3 	¨!¤Ð-Ñ.Ô.ˆCÝ”7˜D )¨A¤,Ð/Ñ0Ô0ˆDØ˜d˜ˆIØŸšØ˜!” 9¨Q¤<°ið %ñ 
ô 
ˆõ (¨Ô(<Ñ=Ô=‰	ˆˆTÝ�#�w˜q”zÑ"Ô"ˆÝ�4˜ œÑ$Ô$ˆØ—’˜S $¨Y�Ñ7Ô7ˆàÔÔ# qÒ(Ð(¨TÔ-AÔ-OÐ(Ø*+ˆFÐ&Ð&�y A‘~Ð&Ñ'ØÔÔ$¨Ò)Ð)¨dÔ.BÔ.QÐ)Ø,-ˆF�1Ð(˜ a™Ð(Ñ)à�>Ð!Ð!r.   c                 óÚ   — t          j        ||¬¦  «        } | |d|z  z
  ¦  «        } | ||z
  ¦  «        } | ||z   ¦  «        } | |d|z  z   ¦  «        }| d|z  z   d|z  z
  |z   d|z  z  S )z2Helper function for numerical (first) derivatives.)Ú
fill_valuer4   é   ç      (@)rN   Ú	full_like)ÚfuncÚxÚepsÚhÚ
f_minus_2hÚ
f_minus_1hÚ	f_plus_1hÚ	f_plus_2hs           r,   Únumerical_derivativerw   {   s�   € õ 	Œ�Q 3Ð'Ñ'Ô'€AØ��a˜!˜a™%‘i‘”€JØ��a˜!‘e‘”€JØ��Q˜‘U‘”€IØ��Q˜˜Q™‘Y‘”€IØˆJ˜˜Y™Ñ&¨¨Z©Ñ7¸*ÑDÈÐPSÉÑTÐTr.   r+   )Úidsc                 óˆ  — | j         r0d}t          j        t          j        d|dz
  |¬¦  «        d¦  «        }n.t	          | j        ¦  «        \  }}t          j        ||d¬¦  «        }| j        j        rt          j        || j        j        f         }| j        j	        rt          j        || j        j
        f         }|                      |¦  «        sJ ‚|j        d         }t	          | j        ¦  «        \  }}| j         rgt          j        ||f¦  «        }t          j        |||¬¦  «        |dd…df<   dd|dd…df         z
  z  |dd…df<   dd|dd…df         z
  z  |dd…df<   nt          j        |||¬¦  «        }|                      |¦  «        sJ ‚| j                             |¦  «        }|                      ||¬	¦  «         dS )
z4Test interval ranges of y_true and y_pred in losses.rM   r   r3   ©Únumé
   Nç      à?r4   ©rh   rg   )rQ   rN   ÚtileÚlinspacer   r]   r`   Úr_rI   ra   rJ   Úin_y_true_rangeÚshaperZ   rR   Úin_y_pred_rangerY   r+   )r+   rS   rh   rI   rJ   ÚnÚy_predrg   s           r,   Útest_loss_boundaryr‡   ‰   sÜ  € ð Ôð 0Øˆ	Ý”�œ Q¨	°A©¸9ÐEÑEÔEÀqÑIÔIˆˆå'¨Ô(<Ñ=Ô=‰	ˆˆTÝ”˜S $¨BÐ/Ñ/Ô/ˆð ÔÔ)ð 9Ý”�v˜tÔ3Ô7Ð7Ô8ˆØÔÔ*ð :Ý”�v˜tÔ3Ô8Ð8Ô9ˆà×Ò Ñ'Ô'Ð'Ð'Ð'àŒ�QŒ€AÝ# DÔ$8Ñ9Ô9�I€CˆØÔð /Ý”˜1˜i˜.Ñ)Ô)ˆÝ”{ 3¨°!Ð4Ñ4Ô4ˆˆqˆqˆq�!ˆt‰Ø˜a &¨¨¨¨A¨¤,Ñ.Ñ/ˆˆqˆqˆq�!ˆt‰Ø˜a &¨¨¨¨A¨¤,Ñ.Ñ/ˆˆqˆqˆq�!ˆt‰ˆå”˜S $¨AÐ.Ñ.Ô.ˆà×Ò Ñ'Ô'Ð'Ð'Ð'ð ”Y—^’^ FÑ+Ô+€NØ‡I‚I�V¨N€IÑ;Ô;Ð;Ð;Ð;r.   )rB   r   çš™™™™™¹?rC   rˆ   rC   éýÿÿÿçš™™™™™¹¿ç      ø?rM   )r‰   rŠ   r   rˆ   rC   )rˆ   r}   çÍÌÌÌÌÌì?éÿÿÿÿgš™™™™™ñ?)rB   rŠ   r   rB   )ç        ç      ð?r4   )r‰   rŠ   r   r}   z!loss, y_true_success, y_true_failc                 óÂ   — |D ],}|                       t          j        |g¦  «        ¦  «        sJ ‚Œ-|D ],}|                       t          j        |g¦  «        ¦  «        rJ ‚Œ-dS )z-Test boundaries of y_true for loss functions.N)r‚   rN   Úarray)r+   Úy_true_successÚy_true_failÚys       r,   Útest_loss_boundary_y_truer•   à   óz   € ð ð 3ð 3ˆØ×#Ò#¥B¤H¨a¨S¡M¤MÑ2Ô2Ð2Ð2Ð2Ð2Øð 7ð 7ˆØ×'Ò'­¬°!°©¬Ñ6Ô6Ð6Ð6Ð6Ð6ð7ð 7r.   z!loss, y_pred_success, y_pred_failc                 óÂ   — |D ],}|                       t          j        |g¦  «        ¦  «        sJ ‚Œ-|D ],}|                       t          j        |g¦  «        ¦  «        rJ ‚Œ-dS )z-Test boundaries of y_pred for loss functions.N)r„   rN   r‘   )r+   Úy_pred_successÚy_pred_failr”   s       r,   Útest_loss_boundary_y_predrš   ì   r–   r.   zDloss, y_true, raw_prediction, loss_true, gradient_true, hessian_truer�   g      @rl   é   g      @g      Ð¿)r/   Údeltag      @ç       @g      È¿g      °?rŽ   g@Œµx¯Äg@Œµx¯Dg     @�Àg     @�@g     ÀBÀg     ÀB@g     €BÀé%   gÿÿÿÿÿÿï¿gT`ÊG˜˜<g33333sBÀg33333sB@g)Pç�v.›<g     €B@gÿÿÿÿÿÿï?gU`ÊG˜˜<gÇ0fÅÕ�<gš™™™™m@g       +g       «gÍÌÌÌÌm@©rS   )çš™™™™™É?r}   ç333333Ó?r    r¡   )g     ˆÃ@r   ç_eGô|§>r¢   c                 ó  —  | t          j        |g¦  «        t          j        |g¦  «        ¬¦  «        }|                      t          j        |g¦  «        t          j        |g¦  «        ¬¦  «        }|                      t          j        |g¦  «        t          j        |g¦  «        ¬¦  «        \  }}	|                      t          j        |g¦  «        t          j        |g¦  «        ¬¦  «        \  }
}|t          |dd¬¦  «        k    sJ ‚|t          |dd¬¦  «        k    sJ ‚|�H|t          |dd¬¦  «        k    sJ ‚|	t          |dd¬¦  «        k    sJ ‚|
t          |dd¬¦  «        k    sJ ‚|�|t          |dd¬¦  «        k    sJ ‚dS dS )z7Test losses, gradients and hessians at specific values.r~   çVçž¯Ò<©ÚrelÚabsN)rN   r‘   ÚgradientÚloss_gradientÚgradient_hessianr   )r+   rh   rg   Ú	loss_trueÚgradient_trueÚhessian_trueÚloss1Úgrad1Úloss2Úgrad2Úgrad3Úhesss               r,   Útest_loss_on_specific_valuesr´   ø   sÀ  € ðx ˆD�œ & Ñ*Ô*½2¼8À^ÐDTÑ;UÔ;UÐVÑVÔV€EØ�MŠMÝŒx˜˜Ñ!Ô!µ"´(¸NÐ;KÑ2LÔ2Lð ñ ô €Eð ×%Ò%ÝŒx˜˜Ñ!Ô!µ"´(¸NÐ;KÑ2LÔ2Lð &ñ ô �L€Eˆ5ð ×'Ò'ÝŒx˜˜Ñ!Ô!µ"´(¸NÐ;KÑ2LÔ2Lð (ñ ô �K€Eˆ4ð •F˜9¨%°UÐ;Ñ;Ô;Ò;Ð;Ð;Ð;Ø•F˜9¨%°UÐ;Ñ;Ô;Ò;Ð;Ð;Ð;àÐ Ø�˜}°%¸UÐCÑCÔCÒCÐCÐCÐCØ�˜}°%¸UÐCÑCÔCÒCÐCÐCÐCØ�˜}°%¸UÐCÑCÔCÒCÐCÐCÐCàÐØ•v˜l°¸5ÐAÑAÔAÒAÐAÐAÐAð  ÐØAÐAr.   Úreadonly_memmapFTÚdtype_inÚ	dtype_outÚsample_weightÚout1Úout2Ú	n_threadsc                 ó~  —  | ¦   «         } d}t          | |ddd¬¦  «        \  }	}
|	                     |¦  «        }	|
                     |¦  «        }
|�t          j        dg|z  |¬¦  «        }|�t          j        |	|¬¦  «        }|�t          j        |
|¬¦  «        }|r/t          |	¦  «        }	t          |
¦  «        }
|�t          |¦  «        }|                      |	|
|||¬	¦  «        }|�||u snnJ ‚|                      |	|
|||¬¦  «        }|�||u snnJ ‚|                      |	|
||||¬¦  «        \  }}|�||u snnJ ‚|�||u snnJ ‚|�| j	        rt          j        |
|¬¦  «        }|  
                    |	|
||||¬¦  «        \  }}|�||u snnJ ‚|�||u snnJ ‚ | |	|
|¬¦  «         |                      |	|¬¦  «         |                      |	|¬¦  «         t          | d¦  «        r|                      |
¬¦  «         t          | d¦  «        r3|                      |	|
||||¬¦  «        \  }}|�||u snnJ ‚|�||u sndS J ‚dS dS )a0  Test acceptance of dtypes, readonly and writeable arrays in loss functions.

    Check that loss accepts if all input arrays are either all float32 or all
    float64, and all output arrays are either all float32 or all float64.

    Also check that input arrays can be readonly, e.g. memory mapped.
    rF   rA   ©éöÿÿÿr|   rG   ©r+   rb   rc   rd   re   Nr�   ©Údtype)rh   rg   r¸   Úloss_outr»   T)rh   rg   r¸   Úgradient_outr»   )rh   rg   r¸   rÂ   rÃ   r»   )rh   rg   r¸   rÃ   Úhessian_outr»   ©rh   rg   r¸   ©rh   r¸   Úpredict_proba)rg   Úgradient_proba)rh   rg   r¸   rÃ   Ú	proba_outr»   )ri   rW   rN   r‘   Ú
empty_liker&   r+   r¨   r©   rQ   rª   Úfit_intercept_onlyÚconstant_to_optimal_zeror<   rÇ   rÈ   )r+   rµ   r¶   r·   r¸   r¹   rº   r»   rb   rh   rg   ÚlÚgrr   Úps                  r,   Útest_loss_dtyperÐ   ‹  sG  € ð$ ˆ4‰6Œ6€Dà€IÝ9ØØØØØðñ ô Ñ€FˆNð �]Š]˜8Ñ$Ô$€FØ#×*Ò*¨8Ñ4Ô4€NàÐ Ýœ # ¨Ñ!2¸(ÐCÑCÔCˆØÐÝŒ}˜V¨9Ð5Ñ5Ô5ˆØÐÝŒ}˜^°9Ð=Ñ=Ô=ˆàð EÝ*¨6Ñ2Ô2ˆÝ2°>ÑBÔBˆØÐ$Ý5°mÑDÔDˆMà�	Š	ØØ%Ø#ØØð 	ñ 	ô 	€Að Ð(ˆ1�ˆ9ˆ9ˆ9ˆ9ˆ9Ð2Ø�ŠØØ%Ø#ØØð 	ñ 	ô 	€Að Ð(ˆ1�ˆ9ˆ9ˆ9ˆ9ˆ9Ð2Ø×ÒØØ%Ø#ØØØð ñ ô �D€A€qð Ð(ˆ1�ˆ9ˆ9ˆ9ˆ9ˆ9Ð2ØÐ(ˆ1�ˆ9ˆ9ˆ9ˆ9ˆ9Ð2ØÐ˜DÔ.ÐÝŒ}˜^°9Ð=Ñ=Ô=ˆØ× Ò ØØ%Ø#ØØØð !ñ ô �D€A€qð Ð(ˆ1�ˆ9ˆ9ˆ9ˆ9ˆ9Ð2ØÐ(ˆ1�ˆ9ˆ9ˆ9ˆ9ˆ9Ð2Ø€D� ~À]ÐSÑSÔSÐSØ×Ò 6¸ÐÑGÔGÐGØ×!Ò!¨¸}Ð!ÑMÔMÐMÝˆt�_Ñ%Ô%ð :Ø×Ò¨.ÐÑ9Ô9Ð9ÝˆtÐ%Ñ&Ô&ð 
7Ø×"Ò"ØØ)Ø'ØØØð #ñ 
ô 
‰ˆˆ1ð !Ð,ˆq�DˆyˆyˆyˆyˆyÐ6Ø Ð,ˆq�DˆyˆyˆyˆyˆyˆyÐ6ð
7ð 
7ð ˆyr.   Úrangec                 ó  — t          | dddd¬¦  «        \  }}|dk    r-t          j        d|j        d         |j        d         ¬	¦  «        }t          j        |¦  «        }t          j        |¦  «        }t          j        |¦  «        }t          j        |¦  «        }t          j        |¦  «        }t          j        |¦  «        }	|                      ||||¬
¦  «         | j                             ||||¬
¦  «         t          ||¦  «         |                      ||||¬¦  «         | j                             ||||¬¦  «         t          ||¦  «         | j         	                    |||||¬¦  «         | j         	                    |||||¬¦  «         t          ||¦  «         t          ||¦  «         |  
                    |||||¬¦  «         | j         
                    |||||	¬¦  «         t          ||¦  «         t          ||	¦  «         dS )z:Test that Python and Cython functions return same results.é   rA   r½   rG   r¿   rÑ   r3   r   rz   ©rh   rg   r¸   rÂ   ©rh   rg   r¸   rÃ   ©rh   rg   r¸   rÂ   rÃ   ©rh   rg   r¸   rÃ   rÄ   N)ri   rN   r€   rƒ   rÊ   r+   r8   r   r¨   r©   rª   )
r+   r¸   rh   rg   Úout_l1Úout_l2Úout_g1Úout_g2Úout_h1Úout_h2s
             r,   Útest_loss_same_as_C_functionsrÞ   ï  sƒ  € õ :ØØØØØðñ ô Ñ€FˆNð ˜ÒÐÝœ A v¤|°A¤¸F¼LÈ¼OÐLÑLÔLˆåŒ]˜6Ñ"Ô"€FÝŒ]˜6Ñ"Ô"€FÝŒ]˜>Ñ*Ô*€FÝŒ]˜>Ñ*Ô*€FÝŒ]˜>Ñ*Ô*€FÝŒ]˜>Ñ*Ô*€FØ‡I‚IØØ%Ø#Øð	 ñ ô ð ð 	„J‡O‚OØØ%Ø#Øð	 ñ ô ð õ �F˜FÑ#Ô#Ð#Ø‡M‚MØØ%Ø#Øð	 ñ ô ð ð 	„J×ÒØØ%Ø#Øð	 ñ ô ð õ �F˜FÑ#Ô#Ð#Ø„J×ÒØØ%Ø#ØØð ñ ô ð ð 	„J×ÒØØ%Ø#ØØð ñ ô ð õ �F˜FÑ#Ô#Ð#Ý�F˜FÑ#Ô#Ð#Ø×ÒØØ%Ø#ØØð ñ ô ð ð 	„J×ÒØØ%Ø#ØØð  ñ ô ð õ �F˜FÑ#Ô#Ð#Ý�F˜FÑ#Ô#Ð#Ð#Ð#r.   c                 ó´  — t          | ddd|¬¦  «        \  }}|dk    r-t          j        d|j        d         |j        d         ¬¦  «        }t          j        |¦  «        }t          j        |¦  «        }t          j        |¦  «        }t          j        |¦  «        }t          j        |¦  «        }	t          j        |¦  «        }
|                      ||||¬	¦  «        }|                      ||||¬
¦  «        }|                      |||||¬¦  «        \  }}|                      ||||	|
¬¦  «        \  }}t          ||¦  «         t          ||¦  «         t          j        ||¦  «        sJ ‚t          ||¦  «         t          j        ||¦  «        sJ ‚t          ||¦  «         t          ||¦  «         t          ||¦  «         t          j        ||¦  «        sJ ‚t          ||¦  «         t          j        ||¦  «        sJ ‚t          ||	¦  «         t          j        ||	¦  «        sJ ‚t          | d¦  «        r¦| j        sJ ‚t          j        |¦  «        }t          j        |¦  «        }|                      |||||¬¦  «        \  }}t          ||¦  «         t          ||¦  «         t          ||¦  «         t          t          j        |d¬¦  «        dd¬¦  «         dS dS )z‡Test that loss and gradient are the same across different functions.

    Also test that output arguments contain correct results.
    rÓ   rA   r½   r¿   rÑ   r3   r   rz   rÔ   rÕ   rÖ   r×   rÈ   ©rh   rg   r¸   rÃ   rÉ   ©Úaxisç•dyáý¥=)ÚrtolN)ri   rN   r€   rƒ   rÊ   r+   r¨   r©   rª   r   r   Úshares_memoryr<   rQ   rÈ   Úsum)r+   r¸   Úglobal_random_seedrh   rg   rØ   rÙ   rÚ   rÛ   Úout_g3Úout_h3Úl1Úg1Úl2Úg2Úg3Úh3Úout_g4Ú	out_probaÚg4Úprobas                        r,   Ú test_loss_gradients_are_the_samerô   ?  s/  € õ :ØØØØØðñ ô Ñ€FˆNð ˜ÒÐÝœ A v¤|°A¤¸F¼LÈ¼OÐLÑLÔLˆåŒ]˜6Ñ"Ô"€FÝŒ]˜6Ñ"Ô"€FÝŒ]˜>Ñ*Ô*€FÝŒ]˜>Ñ*Ô*€FÝŒ]˜>Ñ*Ô*€FÝŒ]˜>Ñ*Ô*€Fà	�ŠØØ%Ø#Øð	 
ñ 
ô 
€Bð 
�ŠØØ%Ø#Øð	 
ñ 
ô 
€Bð ×ÒØØ%Ø#ØØð  ñ ô �F€Bˆð ×"Ò"ØØ%Ø#ØØð #ñ ô �F€Bˆõ �B˜ÑÔÐÝ�r˜6Ñ"Ô"Ð"ÝÔ˜B Ñ'Ô'Ð'Ð'Ð'Ý�r˜6Ñ"Ô"Ð"ÝÔ˜B Ñ'Ô'Ð'Ð'Ð'Ý�B˜ÑÔÐÝ�B˜ÑÔÐÝ�r˜6Ñ"Ô"Ð"ÝÔ˜B Ñ'Ô'Ð'Ð'Ð'Ý�r˜6Ñ"Ô"Ð"ÝÔ˜B Ñ'Ô'Ð'Ð'Ð'Ý�r˜6Ñ"Ô"Ð"ÝÔ˜B Ñ'Ô'Ð'Ð'Ð'åˆtÐ%Ñ&Ô&ð >ØÔ!Ð!Ð!Ð!Ý”˜~Ñ.Ô.ˆÝ”M .Ñ1Ô1ˆ	Ø×'Ò'ØØ)Ø'ØØð (ñ 
ô 
‰	ˆˆEõ 	˜˜FÑ#Ô#Ð#Ý˜˜BÑÔÐÝ˜˜yÑ)Ô)Ð)Ý�œ˜u¨1Ð-Ñ-Ô-¨q°uÐ=Ñ=Ô=Ð=Ð=Ð=ð>ð >r.   ÚonesrO   c           	      óè  — d}t          | |dd|¬¦  «        \  }}|dk    r!t          j        |t          j        ¬¦  «        }nRt          j                             |¦  «        }|                     |¬¦  «                             t          j        ¦  «        }t          |  	                    |||¬¦  «        ||  	                    ||d	¬¦  «        z  ¦  «         |  
                    ||d	¬¦  «        \  }}|  
                    |||¬¦  «        \  }	}
t          ||z  |	¦  «         | j        st          ||z  |
¦  «         nt          ||d	d	…d	f         z  |
¦  «         |                      ||d	¬¦  «        \  }}|                      |||¬¦  «        \  }
}| j        s(t          ||z  |
¦  «         t          ||z  |¦  «         d	S t          ||d	d	…d	f         z  |
¦  «         t          ||d	d	…d	f         z  |¦  «         d	S )
zÇTest sample weights in loss, gradients and hessians.

    Make sure that passing sample weights to loss, gradient and hessian
    computation methods is equivalent to multiplying by the weights.
    rC   rA   rD   r¿   rõ   )rƒ   rÁ   rL   rÅ   N)ri   rN   rõ   Úfloat64rO   rP   ÚnormalrW   r   r+   r©   rQ   rª   )r+   r¸   rç   rb   rh   rg   rf   Úlossesr¨   Ú	losses_swÚgradient_swÚhessianÚ
hessian_sws                r,   Útest_sample_weight_multipliesrþ   �  st  € ð €IÝ9ØØØØØðñ ô Ñ€FˆNð ˜ÒÐÝœ iµr´zÐBÑBÔBˆˆåŒi×#Ò#Ð$6Ñ7Ô7ˆØŸ
š
¨	˜
Ñ2Ô2×9Ò9½"¼*ÑEÔEˆåØ�	Š	ØØ)Ø'ð 	ñ 	
ô 	
ð
 	Ø
�)Š)ØØ)Øð ñ 
ô 
ñ	
ñô ð ð ×)Ò)ØØ%Øð *ñ ô Ñ€FˆHð
 "×/Ò/ØØ%Ø#ð 0ñ ô Ñ€Iˆ{õ
 �F˜]Ñ*¨IÑ6Ô6Ð6ØÔð HÝ˜ =Ñ0°+Ñ>Ô>Ð>Ð>å˜ =°°°°D°Ô#9Ñ9¸;ÑGÔGÐGà×-Ò-ØØ%Øð .ñ ô Ñ€Hˆgð
 #×3Ò3ØØ%Ø#ð 4ñ ô Ñ€K�ð
 Ôð FÝ˜ =Ñ0°+Ñ>Ô>Ð>Ý˜ -Ñ/°Ñ<Ô<Ð<Ð<Ð<å˜ =°°°°D°Ô#9Ñ9¸;ÑGÔGÐGÝ˜ -°°°°4°Ô"8Ñ8¸*ÑEÔEÐEÐEÐEr.   c                 ó6  — t          | dddd¬¦  «        \  }}|j        dk    rö|dd…df         }t          |                      ||¬¦  «        |                      ||¬¦  «        ¦  «         t          |                      ||¬¦  «        |                      ||¬¦  «        ¦  «         t          |                      ||¬¦  «        |                      ||¬¦  «        ¦  «         t          |                      ||¬¦  «        |                      ||¬¦  «        ¦  «         dS dS )	z5Test that reshaped raw_prediction gives same results.rÓ   rA   r½   rG   r¿   r3   Nr~   )ri   Úndimr   r+   r©   r¨   rª   )r+   rh   rg   Úraw_prediction_2ds       r,   Útest_graceful_squeezingr  ×  sW  € õ :ØØØØØðñ ô Ñ€FˆNð Ô˜aÒÐØ*¨1¨1¨1¨d¨7Ô3ÐÝØ�IŠI˜VÐ4EˆIÑFÔFØ�IŠI˜V°NˆIÑCÔCñ	
ô 	
ð 	
õ 	Ø×Ò fÐ=NÐÑOÔOØ×Ò f¸^ÐÑLÔLñ	
ô 	
ð 	
õ 	Ø�MŠM Ð8IˆMÑJÔJØ�MŠM ¸ˆMÑGÔGñ	
ô 	
ð 	
õ 	Ø×!Ò!¨Ð@QÐ!ÑRÔRØ×!Ò!¨ÀÐ!ÑOÔOñ	
ô 	
ð 	
ð 	
ð 	
ð  Ðr.   c                 ó`  — | j         s�t          j        g d¢¦  «        }t          | j        t
          ¦  «        rRd}| j        j        }| j        j        s||z   }| j        j	        }| j        j
        s||z
  }t          j        |||¦  «        }| j                             |¦  «        }n“t          j        | j        ¦  «                             t           ¦  «        }t          j        | j        | j        ft          j        d¦  «         t           ¬¦  «        }t          j        d¦  «        |j        dd| j        dz   …<   |dk    r-t          j        d|j        d         |j        d         ¬	¦  «        }|                      |||¬
¦  «        }|                      ||¬¦  «        }t1          || dd¬¦  «         dS )z~Test value of perfect predictions.

    Loss of y_pred = y_true plus constant_to_optimal_zero should sums up to
    zero.
    )r¾   rŠ   r   rˆ   rM   r|   ç»½×Ùß|Û=r|   )rƒ   rk   rÁ   Nr3   rÑ   r   rz   rÅ   rÆ   ç›+¡†›„=r¤   )Úatolrä   )rQ   rN   r‘   r9   rY   r   rZ   rI   r`   rJ   ra   ÚclipÚinverserV   rS   rW   rX   ÚfullÚexprU   r€   rƒ   r+   rÌ   r   )	r+   r¸   rg   rq   rI   rJ   rh   Ú
loss_valueÚconstant_terms	            r,   Útest_loss_of_perfect_predictionr  ö  sº  € ð Ôð @åœÐ"<Ð"<Ð"<Ñ=Ô=ˆå�d”i¥Ñ.Ô.ð 	@ØˆCØÔ&Ô*ˆCØÔ'Ô5ð  Ø˜C‘i�ØÔ'Ô,ˆDØÔ'Ô6ð "Ø˜c‘z�ÝœW ^°S¸$Ñ?Ô?ˆNØ”×"Ò" >Ñ2Ô2ˆˆõ ”˜4œ>Ñ*Ô*×1Ò1µ%Ñ8Ô8ˆõ œØ”> 4¤>Ð2Ýœ˜r™
œ
�{Ýð
ñ 
ô 
ˆõ
 68´V¸B±Z´ZˆÔÐ1Ð1˜tœ~°Ñ1Ð1Ñ2à˜ÒÐÝœ A v¤|°A¤¸F¼LÈ¼OÐLÑLÔLˆà—’ØØ%Ø#ð ñ ô €Jð
 ×1Ò1Ø ]ð 2ñ ô €Mõ
 �J  °UÀÐGÑGÔGÐGÐGÐGr.   c                 ó@  ‡ ‡‡
‡‡— d}t          ‰ |dd|¬¦  «        \  ŠŠ‰dk    r-t          j        d‰j        d         ‰j        d         ¬¦  «        Š‰                      ‰‰‰¬	¦  «        \  }}|j        ‰j        k    sJ ‚|j        ‰j        k    sJ ‚‰ j        scˆ ˆˆfd
„}t          |‰d¬¦  «        }t          ||dd¬¦  «         ˆ ˆˆfd„}t          |‰d¬¦  «        }	‰ j        rdS t          ||	dd¬¦  «         dS t          ‰ j
        ¦  «        D ]ŽŠ
ˆ
ˆ ˆˆˆfd„}t          |‰dd…‰
f         d¬¦  «        }t          |dd…‰
f         |dd¬¦  «         ˆ
ˆ ˆˆˆfd„}t          |‰dd…‰
f         d¬¦  «        }	‰ j        rŒqt          |dd…‰
f         |	dd¬¦  «         Œ�dS )zÉTest gradients and hessians with numerical derivatives.

    Gradient should equal the numerical derivatives of the loss function.
    Hessians should equal the numerical derivatives of gradients.
    rÓ   rA   rD   r¿   rÑ   r3   r   rz   rÅ   c                 ó4   •— ‰                      ‰| ‰¬¦  «        S ©NrÅ   )r+   ©rp   r+   r¸   rh   s    €€€r,   Ú	loss_funcz6test_gradients_hessians_numerically.<locals>.loss_funcG  s'   ø€ Ø—9’9ØØ Ø+ð ñ ô ð r.   ç�íµ ÷Æ°>)rq   çñhãˆµøÔ>r  ©rä   r  c                 ó4   •— ‰                      ‰| ‰¬¦  «        S r  ©r¨   r  s    €€€r,   Ú	grad_funcz6test_gradients_hessians_numerically.<locals>.grad_funcQ  s'   ø€ Ø—=’=ØØ Ø+ð !ñ ô ð r.   c                 ón   •— ‰                      ¦   «         }| |d d …‰f<   ‰                     ‰|‰¬¦  «        S r  )Úcopyr+   ©rp   ÚrawÚkr+   rg   r¸   rh   s     €€€€€r,   r  z6test_gradients_hessians_numerically.<locals>.loss_funcf  sI   ø€ Ø$×)Ò)Ñ+Ô+�Ø��A�A�A�q�D‘	Ø—y’yØ!Ø#&Ø"/ð !ñ ô ð r.   Nçñhãˆµøä>c                 ó‚   •— ‰                      ¦   «         }| |d d …‰f<   ‰                     ‰|‰¬¦  «        d d …‰f         S r  )r  r¨   r  s     €€€€€r,   r  z6test_gradients_hessians_numerically.<locals>.grad_funcr  s[   ø€ Ø$×)Ò)Ñ+Ô+�Ø��A�A�A�q�D‘	Ø—}’}Ø!Ø#&Ø"/ð %ñ ô ð �!�!�Q�$ô	ð r.   )ri   rN   r€   rƒ   rª   rQ   rw   r   Úapprox_hessianrÑ   rS   )r+   r¸   rç   rb   rÎ   rr   r  Ú	g_numericr  Ú	h_numericr  rg   rh   s   ``        @@@r,   Ú#test_gradients_hessians_numericallyr#  (  s   øøøøø€ ð €IÝ9ØØØØØðñ ô Ñ€FˆNð ˜ÒÐÝœ A v¤|°A¤¸F¼LÈ¼OÐLÑLÔLˆà× Ò ØØ%Ø#ð !ñ ô �D€A€qð Œ7�nÔ*Ò*Ð*Ð*Ð*ØŒ7�nÔ*Ò*Ð*Ð*Ð*àÔð ;Kð	ð 	ð 	ð 	ð 	ð 	ð 	õ )¨°NÈÐMÑMÔMˆ	Ý˜˜9¨4°eÐ<Ñ<Ô<Ð<ð	ð 	ð 	ð 	ð 	ð 	ð 	õ )¨°NÈÐMÑMÔMˆ	ØÔð 	AàˆDå˜A˜y¨t¸%Ð@Ñ@Ô@Ð@Ð@Ð@õ �t”~Ñ&Ô&ð 	Kð 	KˆAðð ð ð ð ð ð ð ð õ -¨Y¸ÀqÀqÀqÈ!ÀtÔ8LÐRVÐWÑWÔWˆIÝ˜A˜a˜a˜a ˜dœG Y°TÀÐFÑFÔFÐFðð ð ð ð ð ð ð ð õ -¨Y¸ÀqÀqÀqÈ!ÀtÔ8LÐRVÐWÑWÔWˆIØÔ"ð Kàå  ! ! ! Q $¤¨¸ÀEÐJÑJÔJÐJÐJð9	Kð 	Kr.   zloss, x0, y_true)	)Úsquared_errorg       ÀrG   )r$  g     @]@gÍÌÌÌÌÌð?)r$  rŽ   rŽ   )Úbinomial_lossr¡   rˆ   )r%  iôÿÿÿr    )r%  é   rŒ   )Úpoisson_lossrm   r�   )r'  rŽ   r�   )r'  g      6Àg      $@c                 óÂ  ‡ ‡— t          ‰          d¬¦  «        Š t          j        ‰gt          j        ¬¦  «        Št          j        |gt          j        ¬¦  «        }dt          j        dt          j        fˆ ˆfd„}dt          j        dt          j        fˆ ˆfd„}dt          j        dt          j        fˆ ˆfd„}t          ||||d	d
¬¦  «        }‰                     ¦   «         Š|                     ¦   «         }t          ‰ j         	                    |¦  «        ‰¦  «         t           ||¦  «        dd¬¦  «         t          ‰  
                    ‰|¬¦  «        dd¬¦  «         dS )ac  Test that gradients are zero at the minimum of the loss.

    We check this on a single value/sample using Halley's method with the
    first and second order derivatives computed by the Loss instance.
    Note that methods of Loss instances operate on arrays while the newton
    root finder expects a scalar or a one-element array for this purpose.
    N©r¸   rÀ   rp   Úreturnc                 ó`   •— ‰                      ‰| ¬¦  «        ‰                     ‰¬¦  «        z   S )z¥Compute loss plus constant term.

        The constant term is such that the minimum function value is zero,
        which is required by the Newton method.
        r~   ©rh   )r+   rÌ   ©rp   r+   rh   s    €€r,   ro   ztest_derivatives.<locals>.func¡  s>   ø€ ð �yŠyØ¨!ð ñ 
ô 
à×)Ò)°Ð)Ñ8Ô8ñ9ð 	9r.   c                 ó2   •— ‰                      ‰| ¬¦  «        S )Nr~   r  r-  s    €€r,   Úfprimez test_derivatives.<locals>.fprime«  s   ø€ Ø�}Š} F¸1ˆ}Ñ=Ô=Ð=r.   c                 ó>   •— ‰                      ‰| ¬¦  «        d         S )Nr~   r3   )rª   r-  s    €€r,   Úfprime2z!test_derivatives.<locals>.fprime2®  s!   ø€ Ø×$Ò$¨FÀ1Ð$ÑEÔEÀaÔHÐHr.   rC   gH¯¼šò×j>)Úx0r/  r1  ÚmaxiterÚtolr   r  ©r  r~   g�íµ ÷Æ >)r   rN   r‘   r÷   Úndarrayr	   Úravelr   rY   r  r¨   )r+   r2  rh   ro   r/  r1  Úoptimums   ` `    r,   Útest_derivativesr9  ƒ  sŸ  øø€ õ4 �4Œ= tÐ,Ñ,Ô,€DÝŒX�v�h¥b¤jÐ1Ñ1Ô1€FÝ	Œ�2�$�bœjÐ	)Ñ	)Ô	)€Bð9•”
ð 9�rœzð 9ð 9ð 9ð 9ð 9ð 9ð 9ð>•"”*ð >¥¤ð >ð >ð >ð >ð >ð >ð >ðI•2”:ð I¥"¤*ð Ið Ið Ið Ið Ið Ið Iõ ØØØØØØðñ ô €Gð �\Š\‰^Œ^€FØ�mŠm‰oŒo€GÝ�D”I×%Ò% gÑ.Ô.°Ñ7Ô7Ð7Ý�D�D˜‘M”M 1¨5Ð1Ñ1Ô1Ð1Ý�D—M’M¨À�MÑHÔHÈ!ÐRVÐWÑWÔWÐWÐWÐWr.   c                 óÄ  ‡ ‡‡‡— dŠ‰ j         s0‰ j                             t          j        dd‰¬¦  «        ¦  «        ŠnAt          j        ‰¦  «                             t          j        ¦  «        ‰ j        z  Šd‰ddd…<   ‰dk    rt          j        d	d
‰¬¦  «        Š‰  	                    ‰‰¬¦  «        }ˆ ˆˆˆfd„}‰ j         s¼t          |dddi¬¦  «        }‰                      ‰t          j        ‰|¦  «        ‰¬¦  «        }|j        t          ¦   «         k    sJ ‚|j        ‰j        k    sJ ‚t!          |¦  «         |t#          |j        d¬¦  «        k     |                     ¦   «         t#          dd¬¦  «        k     dS t)          |t          j        ‰ j        ¦  «        dddidt-          t          j        d‰ j        f¦  «        dd¦  «        ¬¦  «        }‰                      ‰t          j        |‰df¦  «        ‰¬¦  «        }|j        ‰j        k    sJ ‚t!          |¦  «         t3          ||j        dd¬¦  «         t3          |                     d¬¦  «        dd¬¦  «         dS )zzTest that fit_intercept_only returns the argmin of the loss.

    Also test that the gradient is zero at the minimum.
    é2   éüÿÿÿr›   rz   r   NrF   rÑ   rˆ   r4   rÆ   c                 óº   •— ‰j         st          j        ‰| ¬¦  «        }n/t          j        t          j        | ‰‰j        f¬¦  «        ¦  «        } ‰‰|‰¬¦  «        S )N)rƒ   rk   ©rƒ   rÅ   )rQ   rN   r	  ÚascontiguousarrayÚbroadcast_torS   )rp   rg   r+   rb   r¸   rh   s     €€€€r,   Úfunz%test_loss_intercept_only.<locals>.fun×  ss   ø€ ØÔ!ð 	ÝœW¨IÀ1ÐEÑEÔEˆNˆNåÔ1Ý” ¨)°T´^Ð)DÐEÑEÔEñô ˆNð ˆtØØ)Ø'ð
ñ 
ô 
ð 	
r.   gH¯¼šò×z>r3  rC   )r4  ÚoptionsrÅ   ©r¦   çê-�™—q=)r§   g‚vIhÂ%<=ÚSLSQPr3   )r4  rB  ÚmethodÚconstraintsr  r  rá   r5  )rQ   rY   r  rN   r€   rV   rW   r÷   rS   rË   r   r¨   rn   rƒ   ÚtuplerÁ   r   r   rp   ræ   r   Úzerosr   rõ   r   r   )r+   r¸   ÚarA  ÚoptÚgradrb   rh   s   ``    @@r,   Útest_loss_intercept_onlyrM  Ã  s•  øøøø€ ð €IØÔð Ø”×"Ò"¥2¤;¨r°1¸)Ð#DÑ#DÔ#DÑEÔEˆˆå”˜9Ñ%Ô%×,Ò,­R¬ZÑ8Ô8¸4¼>ÑIˆØˆˆsˆs�ˆs‰à˜ÒÐÝœ C¨°	Ð:Ñ:Ô:ˆà×Ò v¸]ÐÑKÔK€Að
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð Ôð 9Ý˜c t°iÀÐ5EÐFÑFÔFˆØ�}Š}ØÝœ<¨°Ñ2Ô2Ø'ð ñ 
ô 
ˆð
 Œw�%™'œ'Ò!Ð!Ð!Ð!ØŒw˜&œ,Ò&Ð&Ð&Ð&Ý˜!ÑÔÐØ	�V�C”E˜tÐ$Ñ$Ô$Ò$Ð$Ø�Š‰
Œ
•f˜Q EÐ*Ñ*Ô*Ò*Ð*Ð*Ð*õ ØÝŒH�d”nÑ&Ô&ØØ Ð$ØÝ(­¬°!°T´^Ð1DÑ)EÔ)EÀqÈ!ÑLÔLð
ñ 
ô 
ˆð �}Š}ØÝœ7 1 y°! nÑ5Ô5Ø'ð ñ 
ô 
ˆð
 Œw˜&œ,Ò&Ð&Ð&Ð&Ý˜!ÑÔÐÝ˜˜3œ5 t°%Ð8Ñ8Ô8Ð8Ý˜Ÿš a˜Ñ(Ô(¨!°%Ð8Ñ8Ô8Ð8Ð8Ð8r.   zloss, func, random_distrø   c                 ó.   — t          j        | d¬¦  «        S )Né   )Úq)rN   Ú
percentile)rp   s    r,   ú<lambda>rR    s   € ­r¬}¸QÀ"Ð/EÑ/EÔ/E€ r.   ÚpoissonÚexponentialÚbinomialc                 ó–  — t           j                             |¦  «        }|dk    r|                     ddd¬¦  «        }n t	          ||¦  «        d¬¦  «        }|                      |¬¦  «        }t          |¦  «         |t          | j                              ||¦  «        ¦  «        ¦  «        k    sJ ‚| j         	                    |¦  «        t           ||¦  «        ¦  «        k    sJ ‚t          | t          ¦  «        r(t          | j         	                    |¦  «        |¦  «         | j        j        rD|                     | j        j        ¦  «         |                      |¬¦  «        }t          |¦  «         | j        j        rF|                     | j        j        ¦  «         |                      |¬¦  «        }t          |¦  «         dS dS )zÕTest that fit_intercept_only returns the correct functional.

    We test the functional for specific, meaningful distributions, e.g.
    squared error estimates the expectation of a probability distribution.
    rU  r3   r}   rC   rL   r,  N)rN   rO   rP   rU  ÚgetattrrË   r   r   rY   r  r9   r   r   r]   r`   ÚfillrI   ra   rJ   )r+   ro   Úrandom_distrç   rf   Úy_trainÚbaseline_predictions          r,   Ú test_specific_fit_intercept_onlyr\    sÂ  € õ$ Œ)×
Ò
Ð 2Ñ
3Ô
3€CØ�jÒ Ð Ø—,’,˜q #¨C�,Ñ0Ô0ˆˆà+•'˜#˜{Ñ+Ô+°Ð5Ñ5Ô5ˆØ×1Ò1¸Ð1ÑAÔAÐõ Ð)Ñ*Ô*Ð*Ø¥&¨¬¯ª¸¸¸W¹¼Ñ)FÔ)FÑ"GÔ"GÒGÐGÐGÐGØŒ9×ÒÐ0Ñ1Ô1µV¸D¸DÀ¹M¼MÑ5JÔ5JÒJÐJÐJÐJÝ�$�Ñ%Ô%ð UÝ˜œ	×)Ò)Ð*=Ñ>Ô>Ð@SÑTÔTÐTð ÔÔ)ð /Ø�Š�TÔ)Ô-Ñ.Ô.Ð.Ø"×5Ò5¸WÐ5ÑEÔEÐÝÐ-Ñ.Ô.Ð.ØÔÔ*ð /Ø�Š�TÔ)Ô.Ñ/Ô/Ð/Ø"×5Ò5¸WÐ5ÑEÔEÐÝÐ-Ñ.Ô.Ð.Ð.Ð.ð/ð /r.   c            	      óÀ  — t           j                             d¦  «        } d}t          |¬¦  «        }|                      d|dz   d¬¦  «                             t           j        ¦  «        }|                     |¬¦  «        }|j        |fk    sJ ‚t          j	        ||j
        ¬¦  «        }t          |¦  «        D ]}||k                         ¦   «         ||<   Œt          |t          j        |¦  «        t          j        t          j        |¦  «        ¦  «        z
  ¦  «         t          |d	d	d	…f         |j                             |d	d	d	…f         ¦  «        ¦  «         t          j	        d
¬¦  «        t          j        d
¬¦  «        fD ]X}|                     t           j        ¦  «        }|                     |¬¦  «        }|j
        |j
        k    sJ ‚t#          |¦  «         ŒYd	S )zATest that fit_intercept_only returns the mean functional for CCE.r   r›   rŸ   r3   rC   rL   r,  rÀ   Nr|   r>  )rN   rO   rP   r   ÚrandintrW   r÷   rË   rƒ   rI  rÁ   rÑ   Úmeanr   ÚlogrY   rõ   r   )rf   rS   r+   rZ  r[  rÏ   r  s          r,   Ú(test_multinomial_loss_fit_intercept_onlyra  1  sÀ  € å
Œ)×
Ò
 Ñ
"Ô
"€CØ€IÝ¨Ð3Ñ3Ô3€Dð �kŠk˜!˜Y¨™]°ˆkÑ5Ô5×<Ò<½R¼ZÑHÔH€GØ×1Ò1¸Ð1ÑAÔAÐØÔ$¨¨Ò4Ð4Ð4Ð4Ý
Œ� '¤-Ð0Ñ0Ô0€AÝ�9ÑÔð %ð %ˆØ˜1’×"Ò"Ñ$Ô$ˆˆ!‰ˆÝÐ'­¬°©¬µR´W½R¼VÀA¹Y¼YÑ5GÔ5GÑ)GÑHÔHÐHÝÐ'¨¨a¨a¨a¨Ô0°$´)·.².ÀÀ4ÈÈÈÀ7ÄÑ2LÔ2LÑMÔMÐMå”H 2Ð&Ñ&Ô&­¬°bÐ(9Ñ(9Ô(9Ð:ð /ð /ˆØ—.’.¥¤Ñ,Ô,ˆØ"×5Ò5¸WÐ5ÑEÔEÐØ"Ô(¨G¬MÒ9Ð9Ð9Ð9ÝÐ-Ñ.Ô.Ð.Ð.ð	/ð /r.   c                 ó  — d}d}t          |¬¦  «        }t          ||| ¬¦  «        \  }}t          j        dd|¬¦  «        }|j                             |||¬¦  «        }|                     |||¬¦  «        }t          ||¦  «         d	S )
a  Test that Multinomial cy_gradient gives the same result as gradient.

    CyHalfMultinomialLoss does not inherit from CyLossFunction and has a different API.
    As a consequence, the functions like `loss` and `gradient` do not rely on `cy_loss`
    and `cy_gradient`.
    rC   rF   rŸ   ©r+   rb   re   rˆ   r4   rz   rÅ   N)r   ri   rN   r€   r8   Ú_test_cy_gradientr¨   r   )	rç   rb   rS   r+   rh   rg   r¸   r¯   r±   s	            r,   Útest_multinomial_cy_gradientre  H  s¸   € ð €IØ€IÝ¨Ð3Ñ3Ô3€DÝ9ØØØðñ ô Ñ€FˆNõ
 ”K  Q¨IÐ6Ñ6Ô6€MàŒJ×(Ò(ØØ%Ø#ð )ñ ô €Eð
 �MŠMØØ%Ø#ð ñ ô €Eõ
 �E˜5Ñ!Ô!Ð!Ð!Ð!r.   c                 óê  — t           j                             | ¦  «        }d}t          ¦   «         }t	          d¬¦  «        }|                     dd|¬¦  «                             t           j        ¦  «        }|                     |¬¦  «        }t          j	        |df¦  «        }d|z  |dd…df<   d|z  |dd…d	f<   t          |                     ||¬
¦  «        |                     ||¬
¦  «        ¦  «         dS )zKTest that multinomial loss with n_classes = 2 is the same as binomial loss.rÓ   r4   rŸ   r   rL   g      à¿Nr}   r3   r~   )rN   rO   rP   r   r   r^  rW   r÷   rø   rR   r   r+   )rç   rf   rb   ÚbinomÚmultinomrZ  rg   Úraw_multinoms           r,   Ú"test_binomial_and_multinomial_lossrj  f  sõ   € å
Œ)×
Ò
Ð 2Ñ
3Ô
3€CØ€IÝÑÔ€EÝ"¨QÐ/Ñ/Ô/€HØ�kŠk˜!˜Q YˆkÑ/Ô/×6Ò6µr´zÑBÔB€GØ—Z’Z Y�ZÑ/Ô/€NÝ”8˜Y¨˜NÑ+Ô+€LØ Ñ.€L����A�ÑØ˜~Ñ-€L����A�ÑÝØ�
Š
˜'°.ˆ
ÑAÔAØ�Š˜W°\ˆÑBÔBñô ð ð ð r.   rh   )rŽ   r   r   )r�   r3   r3   r†   )g      ÀrE   rE   )r5   rM   rM   c                 óö   — d„ }d„ }t          ¦   «         }|                      |¦  «        } |                     |¦  «        }| |f} ||Ž t           ||Ž ¦  «        k    sJ ‚t           |j        |Ž  ||Ž ¦  «         dS )aÿ  Test that both formulations of the binomial deviance agree.

    Often, the binomial deviance or log loss is written in terms of a variable
    z in {-1, +1}, but we use y in {0, 1}, hence z = 2 * y - 1.
    ESL II Eq. (10.18):

        -loglike(z, f) = log(1 + exp(-2 * z * f))

    Note:
        - ESL 2*f = raw_prediction, hence the factor 2 of ESL disappears.
        - Deviance = -2*loglike + .., but HalfBinomialLoss is half of the
          deviance, hence the factor of 2 cancels in the comparison.
    c           	      ó�   — d| z  dz
  }t          j        t          j        dt          j        | |z  ¦  «        z   ¦  «        ¦  «        S ©Nr4   r3   )rN   r_  r`  r
  ©r”   Úraw_predÚzs      r,   Úalt_lossz:test_binomial_vs_alternative_formulation.<locals>.alt_lossˆ  s>   € Ø�‰E�A‰IˆÝŒw•r”v˜a¥"¤&¨!¨¨h©Ñ"7Ô"7Ñ7Ñ8Ô8Ñ9Ô9Ð9r.   c                 óN   — d| z  dz
  }| dt          j        ||z  ¦  «        z   z  S rm  )rN   r
  rn  s      r,   Úalt_gradientz>test_binomial_vs_alternative_formulation.<locals>.alt_gradientŒ  s/   € à�‰E�A‰IˆØˆr�Q�œ  H¡Ñ-Ô-Ñ-Ñ.Ð.r.   N)r   rW   r   r   r¨   )rh   r†   Úglobal_dtyperq  rs  Úbin_lossÚdatums          r,   Ú(test_binomial_vs_alternative_formulationrw  w  s¨   € ð":ð :ð :ð/ð /ð /õ
  Ñ!Ô!€Hà�]Š]˜<Ñ(Ô(€FØ�]Š]˜<Ñ(Ô(€FØ�VÐ€Eàˆ8�UÐ�v h h°Ð&6Ñ7Ô7Ò7Ð7Ð7Ð7ÝÐ%�HÔ% uÐ-¨|¨|¸UÐ/CÑDÔDÐDÐDÐDr.   c           
      óÞ  — d}t          | |dd|¬¦  «        \  }}t          | d¦  «        rT|                      |¦  «        }|j        || j        fk    sJ ‚t          j        |d¬¦  «        t          dd¬	¦  «        k    sJ ‚t          | d
¦  «        rÝddt          j        |¦  «        ft          j        |¦  «        dft          j        |¦  «        t          j        |¦  «        ffD ]Š\  }}|  	                    ||d||¬¦  «        \  }}|j        || j        fk    sJ ‚t          j        |d¬¦  «        t          dd¬	¦  «        k    sJ ‚t          ||                      ||dd¬¦  «        ¦  «         Œ‰dS dS )z<Test that predict_proba and gradient_proba work as expected.rÓ   rA   rD   r¿   rÇ   r3   rá   rã   rC  rÈ   )NNNrà   rÕ   )ri   r<   rÇ   rƒ   rS   rN   ræ   r   rÊ   rÈ   r   r¨   )r+   rç   rb   rh   rg   ró   rL  s          r,   Útest_predict_probary  ›  sÒ  € ð €IÝ9ØØØØØðñ ô Ñ€FˆNõ ˆt�_Ñ%Ô%ð =Ø×"Ò" >Ñ2Ô2ˆØŒ{˜y¨$¬.Ð9Ò9Ð9Ð9Ð9ÝŒv�e !Ð$Ñ$Ô$­¨q°eÐ(<Ñ(<Ô(<Ò<Ð<Ð<Ð<åˆtÐ%Ñ&Ô&ð àØ•2”= Ñ0Ô0Ð1ÝŒ]˜>Ñ*Ô*¨DÐ1ÝŒ]˜>Ñ*Ô*­B¬M¸.Ñ,IÔ,IÐJð	
ð 	ð 	‰KˆD�%ð ×-Ò-ØØ-Ø"Ø!Øð .ñ ô ‰KˆD�%ð ”; 9¨d¬nÐ"=Ò=Ð=Ð=Ð=Ý”6˜% aÐ(Ñ(Ô(­F°1¸%Ð,@Ñ,@Ô,@Ò@Ð@Ð@Ð@ÝØØ—’Ø!Ø#1Ø"&Ø!%ð	 ñ ô ñô ð ð ð!ð ð	ð 	r.   rÁ   Úorder)ÚCÚFc                 ó  — d}|dk    rt          j        |¦  «        } | |¬¦  «        } |                      |||¬¦  «        \  }}| j        r|j        |fk    sJ ‚|j        dk    sJ ‚nL| j        r)|j        || j        fk    sJ ‚|j        || j        fk    sJ ‚n|j        |fk    sJ ‚|j        |fk    sJ ‚|j        |k    sJ ‚|j        |k    sJ ‚|dk    r|j        j	        sJ ‚|j        j	        sJ ‚dS |j        j
        sJ ‚|j        j
        sJ ‚dS )zÊTest that init_gradient_and_hessian works as expected.

    passing sample_weight to a loss correctly influences the constant_hessian
    attribute, and consequently the shape of the hessian array.
    rF   rÑ   r)  )rb   rÁ   rz  )r3   r{  N)rN   rõ   Úinit_gradient_and_hessianÚconstant_hessianrƒ   rQ   rS   rÁ   ÚflagsÚc_contiguousÚf_contiguous)r+   r¸   rÁ   rz  rb   r¨   rü   s          r,   Útest_init_gradient_and_hessiansrƒ  Ç  s€  € ð €IØ˜ÒÐÝœ 	Ñ*Ô*ˆØˆ4˜mÐ,Ñ,Ô,€DØ×6Ò6ØØØð 7ñ ô Ñ€Hˆgð
 Ôð -ØŒ~ ) Ò-Ð-Ð-Ð-ØŒ} Ò$Ð$Ð$Ð$Ð$Ø	Ô	ð -ØŒ~ )¨T¬^Ð!<Ò<Ð<Ð<Ð<ØŒ} ¨D¬NÐ ;Ò;Ð;Ð;Ð;Ð;àŒ}  Ò,Ð,Ð,Ð,ØŒ}  Ò,Ð,Ð,Ð,àŒ>˜UÒ"Ð"Ð"Ð"ØŒ=˜EÒ!Ð!Ð!Ð!à�‚|€|ØŒ~Ô*Ð*Ð*Ð*ØŒ}Ô)Ð)Ð)Ð)Ð)Ð)àŒ~Ô*Ð*Ð*Ð*ØŒ}Ô)Ð)Ð)Ð)Ð)Ð)r.   zparams, err_msgz+Valid options for 'dtype' are .* Got dtype=z	 instead.c                 ó´   —  | ¦   «         } t          j        t          t          f|¬¦  «        5   | j        dddi|¤Ž\  }}ddd¦  «         dS # 1 swxY w Y   dS )zDTest that init_gradient_and_hessian raises errors for invalid input.©Úmatchrb   rF   Nr)   )ÚpytestÚraisesÚ
ValueErrorÚ	TypeErrorr~  )r+   ÚparamsÚerr_msgr¨   rü   s        r,   Ú%test_init_gradient_and_hessian_raisesr�  ï  sÃ   € ð ˆ4‰6Œ6€DÝ	Œ�
¥IÐ.°gÐ	>Ñ	>Ô	>ð Rð RØ:˜DÔ:ÐQÐQÀQÐQÈ&ÐQÐQÑˆ�'ðRð Rð Rñ Rô Rð Rð Rð Rð Rð Rð Rð Røøøð Rð Rð Rð Rð Rð Rs   ­AÁAÁAzloss, params, err_type, err_msgr/   z4quantile must be an instance of float, not NoneType.zquantile == 0, must be > 0.zquantile == 1.1, must be < 1.c                 ót   — t          j        ||¬¦  «        5   | di |¤Ž ddd¦  «         dS # 1 swxY w Y   dS )z/Test that loss raises errors for invalid input.r…  Nr)   )r‡  rˆ  )r+   r‹  Úerr_typerŒ  s       r,   Ú#test_loss_init_parameter_validationr�     s�   € õB 
Œ�x wÐ	/Ñ	/Ô	/ð ð Øˆˆˆˆvˆˆˆðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s   —	-­1´1c                 óÞ   — d}t          | |ddd¬¦  «        \  }}t          j        | ¦  «        }t          j        |¦  «        } | ||¬¦  «        t	           |||¬¦  «        ¦  «        k    sJ ‚dS )z Test that losses can be pickled.rÓ   rA   rD   rG   r¿   r~   N)ri   ÚpickleÚdumpsÚloadsr   )r+   rb   rh   rg   Úpickled_lossÚunpickled_losss         r,   Útest_loss_pickler—  %  s¡   € ð €IÝ9ØØØØØðñ ô Ñ€FˆNõ ”< Ñ%Ô%€LÝ”\ ,Ñ/Ô/€NØˆ4�v¨nÐ=Ñ=Ô=ÅØˆ˜f°^ÐDÑDÔDñBô Bò ð ð ð ð ð r.   rÏ   )r0   r   r3   r‹   r4   rM   c                 óB  — t          | ¬¦  «        }t          | ¬¦  «        }d}t          ||d¬¦  «        \  }}|j                             |¦  «        }|                     ||¬¦  «        |                     |¦  «        z   }|                     ||¬¦  «        |                     |¦  «        z   }t          ||¦  «         |                     ||¬¦  «        \  }	}
|                     ||¬¦  «        \  }}t          |	||z  ¦  «         t          |
||z  |dz  |z  z   ¦  «         dS )zCTest for identical losses when only the link function is different.r1   r|   rG   rc  r~   r4   N)	r   r   ri   rY   r  r+   rÌ   r   rª   )rÏ   Úhalf_tweedie_logÚhalf_tweedie_identityrb   rh   rg   r†   Úloss_logÚloss_identityÚgradient_logÚhessian_logÚgradient_identityÚhessian_identitys                r,   Ú%test_tweedie_log_identity_consistencyr¡  7  s‚  € õ '¨QÐ/Ñ/Ô/ÐÝ3¸!Ð<Ñ<Ô<ÐØ€IÝ9Ø¨¸ðñ ô Ñ€FˆNð Ô"×*Ò*¨>Ñ:Ô:€Fð  ×$Ò$Ø nð %ñ ô à×1Ò1°&Ñ9Ô9ñ:€Hð *×.Ò.Ø fð /ñ ô à×6Ò6°vÑ>Ô>ñ?€Mõ �H˜mÑ,Ô,Ð,ð !1× AÒ AØ nð !Bñ !ô !Ñ€L�+ð +@×*PÒ*PØ fð +Qñ +ô +Ñ'ÐÐ'õ �L &Ð+<Ñ"<Ñ=Ô=Ð=ÝØ�VÐ/Ñ/°&¸!±)Ð>NÑ2NÑNñô ð ð ð r.   z array_api_loss_class, loss_class)r   r   r   Úmethod_name)Ú__call__r¨   r+   r©   Úuse_sample_weightz"namespace, device_name, dtype_namec           
      ó  — d„ }t          |||¦  «        \  }}	t          |¦  «        }
|dk    rdnd}d}d} | ||	¬¦  «        } |¦   «         }t          ||dd	|¬
¦  «        \  }}|                     |¦  «        }|                     |¦  «        }|                     ||	¬¦  «        }|                     ||	¬¦  «        }|rvt
          j                             |¦  «        }|                     dd|¬¦  «         	                    dd ¦  «                             |¦  «        }|                     ||	¬¦  «        }nd }d }t          ||¦  «        }t          ||¦  «        } ||||¬¦  «        }t          d¬¦  «        5   ||||¬¦  «        }|dk    rt          j        ||¦  «        sJ ‚nNt          |t          ¦  «        r(t          ||¦  «        D ]\  }} |||||||
¬¦  «         Œn |||||||
¬¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nc                 ó¾   — t          t          | t          d¬¦  «        |||¬¦  «         | j        |j        k    sJ ‚t	          | ¦  «        t	          |¦  «        k    sJ ‚d S )NÚcpu©Úxpr$   r  )r   r!   rN   rÁ   Úarray_api_device©Ú	result_xpÚ	result_npÚraw_prediction_xpr©  rä   r  s         r,   Ú_assert_array_api_resultz5test_loss_array_api.<locals>._assert_array_api_result~  sv   € õ 	Ý�I¥"¨UÐ3Ñ3Ô3°YÀTÐPTð	
ñ 	
ô 	
ð 	
ð ŒÐ"3Ô"9Ò9Ð9Ð9Ð9Ý 	Ñ*Ô*Õ.>Ð?PÑ.QÔ.QÒQÐQÐQÐQÐQÐQr.   Úfloat32r  rã   rG   rC   r¨  rA   )iÎÿÿÿr;  r¿   r#   r�   rF   rL   r   rÅ   T)Úarray_api_dispatchr£  r«  )r%   r    ri   rW   ÚasarrayrN   rO   rP   rT   r  rW  r   Úiscloser9   rH  Úzip)Úarray_api_loss_classÚ
loss_classr¢  r¤  Ú	namespaceÚdevice_nameÚ
dtype_namer¯  r©  r$   r  rä   Úrandom_seedrb   Úarray_api_loss_instanceÚloss_instancerh   rg   Ú	y_true_xpr®  rf   Úsample_weight_npÚsample_weight_xprF  Úarray_api_methodr­  r¬  Úres_xpÚres_nps                                r,   Útest_loss_array_apirÃ  d  sü  € ð4Rð Rð Rõ & i°¸jÑIÔI�J€BˆÝ˜*Ñ%Ô%€DØ Ò*Ð*ˆ4ˆ4°€DØ€KØ€IØ2Ð2°bÀÐHÑHÔHÐØ�J‘L”L€MÝ9ØØØØØðñ ô Ñ€FˆNð �]Š]˜:Ñ&Ô&€FØ#×*Ò*¨:Ñ6Ô6€NØ—
’
˜6¨&�
Ñ1Ô1€IØŸ
š
 >¸&˜
ÑAÔAÐØð  ÝŒi×#Ò# KÑ0Ô0ˆà�KŠK˜˜A IˆKÑ.Ô.×3Ò3°A°tÑ<Ô<×CÒCÀJÑOÔOð 	ð Ÿ:š:Ð&6¸v˜:ÑFÔFÐÐàÐØÐå�] KÑ0Ô0€FÝÐ6¸ÑDÔDÐØ�Ø nÐDTðñ ô €Iõ 
¨4Ð	0Ñ	0Ô	0ð ð Ø$Ð$ØØ,Ø*ð
ñ 
ô 
ˆ	ð ˜:Ò%Ð%å”:˜i¨Ñ3Ô3Ð3Ð3Ð3Ð3å˜)¥UÑ+Ô+ð Ý&)¨)°YÑ&?Ô&?ð ð ‘N�F˜FØ,Ð,Ø"(Ø"(Ø*;ØØ!Ø!ðñ ô ð ð ðð )Ð(Ø'Ø'Ø&7ØØØðñ ô ð ð-ð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s   Å5A;G=Ç=HÈHc           	      óT  — t          j        d¦  «        }d|j        _        t	          j        ddd¦  «        }t          | ||¦  «        \  }}|D ]Ú}|dk    r|                     ||j        |¬¦  «        }n|                     ||j	        |¬¦  «        }t          t          ||                     |¦  «        |¬¦  «        ¦  «        }	t          |                     d	|                     |¦  «        z   ¦  «        ¦  «        }
|
d
k    sJ ‚|	t          j        |
|dk    rdndd
¬¦  «        k    sJ ‚ŒÛd S )NÚmpmathrC   iØÿÿÿé(   i,  r°  )rÁ   r$   )rg   Úraw_prediction_expr©  r3   r   r  rD  r¥   )r‡  ÚimportorskipÚmpÚprecrN   r€   r%   r²  r°  r÷   rX   r   r
  r`  r   )r·  r¸  r¹  rÅ  Úvalues_to_testr©  r$   Úvaluerp   r¬  Úresult_mpmaths              r,   Útest_log1pexprÎ  È  sT  € õ
 Ô  Ñ*Ô*€FØ€F„I„NÝ”[  b¨#Ñ.Ô.€NÝ% i°¸jÑIÔI�J€BˆØð 
ð 
ˆØ˜Ò"Ð"Ø—
’
˜5¨¬
¸6�
ÑBÔBˆAˆAà—
’
˜5¨¬
¸6�
ÑBÔBˆAåÝØ Ø#%§6¢6¨!¡9¤9Øðñ ô ñ
ô 
ˆ	õ ˜fŸjšj¨¨V¯ZªZ¸Ñ->Ô->Ñ)>Ñ?Ô?Ñ@Ô@ˆØ˜qÒ Ð Ð Ð à�FœMØØ" iÒ/Ð/��°UØð
ñ 
ô 
ò 
ð 
ð 
ð 
ð 
ð!
ð 
r.   c                  óð   — d„ t          j        t          t           j        ¦  «        D ¦   «         } t	          | ¦  «        dk    s
J d¦   «         ‚| D ]'}|j        dk    sJ |j        › d|j        ›d�¦   «         ‚Œ(dS )aœ  Check that Cython extension types in _loss have the correct __module__.

    When _loss_cython_tree in meson.build is missing __init__.py files, Cython
    can not detect the package hierarchy and set __module__ = '_loss' instead
    of 'sklearn._loss._loss' on all Cy* extension types, e.g.
    `CyHalfMultinomialLoss`. This breaks downstream tools like skops that rely
    on __module__ for serialization.
    c                 óB   — g | ]\  }}|                      d ¦  «        ¯|‘ŒS )ÚCy)Ú
startswith)r*   r?   Úobjs      r,   r-   z/test_cy_loss_classes_module.<locals>.<listcomp>ñ  s>   € ð ð ð áˆD�#Ø�?Š?˜4Ñ Ô ðØðð ð r.   r   z+No Cy* classes found in sklearn._loss._losszsklearn._loss._lossz.__module__ == z , expected 'sklearn._loss._loss'N)ÚinspectÚ
getmembersÚ_loss_moduleÚisclassÚlenÚ
__module__r;   )Ú
cy_classesÚclss     r,   Útest_cy_loss_classes_modulerÜ  è  s«   € ðð å Ô+­L½'¼/ÑJÔJðñ ô €Jõ
 ˆz‰?Œ?˜QÒÐÐÐ MÑÔÐØð 
ð 
ˆØŒ~Ð!6Ò6Ð6Ð6ØŒ|ð .ð .¨C¬Nð .ð .ð .ñ 7Ô6Ð6Ð6ð
ð 
r.   )rA   rD   rG   )grÔ  r’  ÚnumpyrN   r‡  Únumpy.testingr   r   r   Úscipy.optimizer   r   r   r	   Úscipy.specialr
   Úsklearnr   Úsklearn._lossr   rÖ  Úsklearn._loss.linkr   r   Úsklearn._loss.lossr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Úsklearn.utilsr   Úsklearn.utils._array_apir    r!   r"   r$   rª  Úsklearn.utils._testingr%   r&   r'   ÚlistÚvaluesÚ
ALL_LOSSESÚLOSS_INSTANCESr@   ri   rw   ÚmarkÚparametrizer‡   ÚinfÚY_COMMON_PARAMSÚY_TRUE_PARAMSÚY_PRED_PARAMSr•   rš   r`  Úlog1pr´   r°  r÷   rÐ   rÞ   rô   rþ   r  r  r#  r9  rM  r_  Úmedianr\  ra  re  rj  r‘   rw  ry  rƒ  Úint64r�  rŠ  r‰  r�  r—  r¡  rÃ  rÎ  rÜ  r)   r.   r,   ú<module>rõ     sv  ðØ €€€Ø €€€à Ð Ð Ð Ø €€€Ø =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð $Ð #Ð #Ð #Ð #Ð #à "Ð "Ð "Ð "Ð "Ð "Ø /Ð /Ð /Ð /Ð /Ð /Ø @Ð @Ð @Ð @Ð @Ð @Ð @Ð @ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð$ ,Ð +Ð +Ð +Ð +Ð +ðð ð ð ð ð ð ð ð ð ð
ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ˆT�.�'”.Ñ"Ô"Ñ#Ô#€
à0Ð0 ZÐ0Ñ0Ô0€à Ø€K˜ÐÑÔØ€I�tÐÑÔØ€O˜$ÐÑÔØ€O˜!ÐÑÔØ€O˜!ÐÑÔØ€O˜!ÐÑÔØ€O˜#ÐÑÔØÐ !Ð$Ñ$Ô$ØÐ !Ð$Ñ$Ô$ØÐ !Ð$Ñ$Ô$ØÐ #Ð&Ñ&Ô&ðñ €ðð ð ð  CEð""ð ""ð ""ð ""ðJUð Uð Uð „×Ò˜ Ð5GÐÑHÔHð <ð  <ñ IÔHð <ðL ÐÑÔÐ,Ð,Ð,°´¨w¸¼Ð.?Ð@Ø€]�_„_Ð)Ð)Ð)¨R¬V¨G°R´VÐ+<Ð=Ø€[�]„]Ð'Ð'Ð'¨2¬6¨'°2´6Ð):Ð;Ø€Y�[„[Ð%Ð%Ð%¨¬¨°´Ð'8Ð9Ø€_ÑÔ˜˜c˜
 b¤f W¨b°$¸¼Ð$?Ð@Ø€]�_„_�s˜C�j B¤F 7¨B°°a¸¼Ð"@ÐAØ€_˜2ÐÑÔ  c 
¨b¬f¨W°b´fÐ,=Ð>Ø€_˜1ÐÑÔ  S˜z¨R¬V¨G°R´VÐ+<Ð=Ø€_˜3ÐÑÔ # s ¨r¬v¨g°r¸4ÀÄÐ-HÐIØ€_˜1ÐÑÔ  S˜z¨R¬V¨G°R¸¸qÀ"Ä&Ð+IÐJØ€_˜1ÐÑÔ  S˜z¨R¬V¨G°R¸¸qÀ"Ä&Ð+IÐJØÐ 2Ð&Ñ&Ô&¨¨c¨
°b´f°W¸b¼fÐ4EÐFØÐ 1Ð%Ñ%Ô%Ð'>Ð'>Ð'>À"Ä&ÀÈ"Ì&Ð@QÐRØÐ 3Ð'Ñ'Ô'¨#¨s¨°r´v°g¸rÀ4ÈÌÐ5PÐQØÐ 1Ð%Ñ%Ô%¨¨S z°R´V°G¸RÀÀqÈ"Ì&Ð3QÐRØÐ 1Ð%Ñ%Ô%¨¨S z°R´V°G¸RÀÀqÈ"Ì&Ð3QÐRØÐÑÔ˜˜˜¨B¬F¨7°B¸¸2¼6Ð*BÐCØÐÑÔ˜B "¤& ¨"¨c°2´6Ð :Ð;ð'€ð2 €_ÑÔ˜˜˜RÐ Ø€Y�[„[�1�#�rÐØ€_˜2ÐÑÔ   °Ð4Ø€_˜1ÐÑÔ  a˜y¨"Ð-Ø€_˜3ÐÑÔ !  bÐ)ØÐ 2Ð&Ñ&Ô&¨¨¨¸Ð<ØÐ 1Ð%Ñ%Ô%¨¨a y°"Ð5ØÐ 3Ð'Ñ'Ô'¨!¨¨bÐ1ØÐÑÔ˜!˜Q˜ Ð$ØÐÑÔ˜M˜M˜M¨2Ð.ð€ð €_ÑÔ˜˜Q˜CÐ Ø€_˜2ÐÑÔ  M M MÐ2Ø€_˜1ÐÑÔ˜r = = =Ð1Ø€_˜3ÐÑÔ  a SÐ)ØÐ 2Ð&Ñ&Ô&¨¨M¨M¨MÐ:ØÐ 1Ð%Ñ%Ô% } } }°bÐ9ØÐ 3Ð'Ñ'Ô'¨¨a¨SÐ1ØÐÑÔ˜˜a ˜VÐ$ØÐÑÔ˜S #˜J¨¨A¨Ð/ð€ð „×ÒØ'Ø�mÑ#ñô ð7ð 7ñ	ô ð7ð „×ÒØ'Ø�mÑ#ñô ð7ð 7ñ	ô ð7ð „×ÒØJðsØ	Ð	Ñ	Ô	˜S # q¨!¨QÐ/ðsà	ˆ‰Œ˜#˜s C¨¨dÐ3ðsð 
ˆ˜cÐ	"Ñ	"Ô	" C¨¨a°°dÐ;ðsð 
ˆ˜dÐ	#Ñ	#Ô	# S¨#¨~¸xÈÐNð	sð
 
ˆ˜dÐ	#Ñ	#Ô	# S¨#¨x¸ÀÐEðsð 
ˆ˜C qÐ	)Ñ	)Ô	)¨3°°_ÀdÈDÐQðsð 
ˆ˜C qÐ	)Ñ	)Ô	)¨3°°ZÀÀtÐLðsð 
ˆÑ	Ô	˜C  ¤¨¡¤¨A°°F°B´F¸1±I´I±Ñ,=¸uÀaÐHðsð 
ˆ‰Œ˜#˜v˜rœv a™yœy¨&¨"¬&°©)¬)°eÑ*;¸YÈÐNðsð 
ˆ˜qÐ	!Ñ	!Ô	! 3¨¨¬¨q©	¬	Ð3DÀdÈDÐQðsð 
!Ð	  qÐ	)Ñ	)Ô	)¨3°°Q¸¸V¸R¼VÀA¹Y¼Y¹Ñ5FÈÈdÐSðsð 
!Ð	  qÐ	)Ñ	)Ô	)¨3°°V°R´V¸A±Y´YÀÑ5FÈÈdÐSðsð $Ð#¨!Ð,Ñ,Ô,ØØØ)ØØð	
ðsð, ÐÑÔØØˆBŒF�1‰IŒIØˆBŒH�Q‰KŒK˜$  ¤¨¡¤Ñ*Ñ*ØØð	
ð+sðr 
Ð	Ñ	Ô	˜S %¨¨A¨qÐ1ðssðt 
Ð	Ñ	Ô	˜S %¨¨r°1Ð5ðusðv 
Ð	Ñ	Ô	˜S $¨¨1¨aÐ0ðwsðx 
Ð	Ñ	Ô	˜S $¨¨R°Ð3ðysðz 
Ð	Ñ	Ô	˜S %¨¨r°1Ð5ð{sð| 
Ð	Ñ	Ô	˜S %¨¨YÐ8MÐNð}sð~ 
Ð	Ñ	Ô	˜S %ÐFÐ+@Ð*AÀAÑ*EÐFÐFðsð@ 
Ð	Ñ	Ô	˜S %¨¨yÐ:OÐPðAsðB 
Ð	Ñ	Ô	˜S %ÐFÐ+@Ð*AÀAÑ*EÐFÐFðCsðD 
Ð	Ñ	Ô	˜S $¨¨IÐ7LÐMðEsðF 
Ð	Ñ	Ô	˜S $ÐEÐ*?Ð)@À1Ñ)DÐEÐEðGsðH 
Ð	Ñ	Ô	˜S $¨¨aÐ1FÐGðIsðJ 
Ð	Ñ	Ô	˜S %¨°Ð3JÐKðKsðL 
Ð	Ñ	Ô	˜S $¨¨1¨aÐ0ðMsðN 
Ð	Ñ	Ô	˜S $¨¨a°Ð3ðOsðR ÐÑÔØØØØ$Ø#ð	
ðQsð` 
Ð	Ñ	Ô	˜S %¨¨A¨qÐ1ðasðb 
Ð	Ñ	Ô	˜S # q¨!¨QÐ/ðcsðd 
Ð	Ñ	Ô	˜S # s¨A¨qÐ1ðesðh  Ð¨!Ð,Ñ,Ô,ØØˆOˆOØˆI�o�o�oÑ&Ô&¨Ñ,ØØð	
ðgsðx  Ð¨!Ð,Ñ,Ô,ØØˆOˆOØˆI�o�o�oÑ&Ô&¨Ñ,ØØð	
ðwsðH  Ð¨!Ð,Ñ,Ô,ØØˆOˆOØˆI�o�o�oÑ&Ô&¨Ñ,ØØð	
ðGsðX  Ð¨!Ð,Ñ,Ô,ØØˆNˆNØˆI�n�n�nÑ%Ô%¨Ñ.ØØð	
ðWsðh 	ðm ñ wô wðpBð Bñqwô wðpBð6 „×Ò˜ Ñ,Ô,Ø„×ÒÐ*¨U°D¨MÑ:Ô:Ø„×Ò˜ b¤j°"´*Ð%=Ñ>Ô>Ø„×Ò˜ r¤z°2´:Ð&>Ñ?Ô?Ø„×Ò˜¨4°¨)Ñ4Ô4Ø„×Ò˜ $¨ Ñ+Ô+Ø„×Ò˜ $¨ Ñ+Ô+Ø„×Ò˜ q¨! fÑ-Ô-ðY7ð Y7ñ .Ô-ñ ,Ô+ñ ,Ô+ñ 5Ô4ñ @Ô?ñ ?Ô>ñ ;Ô:ñ -Ô,ðY7ðx „×Ò˜ Ð5GÐÑHÔHØ„×Ò˜¨4°¨/Ñ:Ô:ðK$ð K$ñ ;Ô:ñ IÔHðK$ð\ „×Ò˜ Ð5GÐÑHÔHØ„×Ò˜¨4°¨/Ñ:Ô:ðL>ð L>ñ ;Ô:ñ IÔHðL>ð^ „×Ò˜ Ð5GÐÑHÔHØ„×Ò˜¨6°8Ð*<Ñ=Ô=ðBFð BFñ >Ô=ñ IÔHðBFðJ „×Ò˜ Ð5GÐÑHÔHð
ð 
ñ IÔHð
ð< „×Ò˜ Ð5GÐÑHÔHØ„×Ò˜¨4°¨/Ñ:Ô:ð-Hð -Hñ ;Ô:ñ IÔHð-Hð` „×Ò˜ Ð5GÐÑHÔHØ„×Ò˜¨4°¨/Ñ:Ô:ðVKð VKñ ;Ô:ñ IÔHðVKðr „×ÒØðð ð ñô ð" ð+Xð +Xñ „ñ#ô ð$+Xð\ „×Ò˜ Ð5GÐÑHÔHØ„×Ò˜¨4°¨/Ñ:Ô:ð>9ð >9ñ ;Ô:ñ IÔHð>9ðB „×ÒØà	Ð	Ñ	Ô	˜RœW hÐ/Ø	ˆ‰Œ˜"œ) XÐ.Ø	ˆ˜dÐ	#Ñ	#Ô	#Ð%EÐ%EÀxÐPØ	ˆÑ	Ô	˜BœG YÐ/Ø	ˆ‰Œ˜"œ' =Ð1Ø	ˆÑ	Ô	˜BœG ]Ð3Ø	Ð	Ñ	Ô	˜RœW jÐ1ðñô ð/ð /ñô ð/ð>/ð /ð /ð."ð "ð "ð<ð ð ð" „×Ò˜ H B¤H¨[¨[¨[Ñ$9Ô$9¸8¸2¼8ÀKÀKÀKÑ;PÔ;PÐ#QÑRÔRØ„×Ò˜ H B¤H¨^¨^¨^Ñ$<Ô$<¸h¸b¼hÀ{À{À{Ñ>SÔ>SÐ#TÑUÔUðEð Eñ VÔUñ SÔRðEðD „×Ò˜ Ð5GÐÑHÔHð(ð (ñ IÔHð(ðV „×Ò˜ Ñ,Ô,Ø„×Ò˜¨4°¨/Ñ:Ô:Ø„×Ò˜ 2¤:¨r¬zÐ":Ñ;Ô;Ø„×Ò˜ *Ñ-Ô-ð!*ð !*ñ .Ô-ñ <Ô;ñ ;Ô:ñ -Ô,ð!*ðH „×Ò˜ Ñ,Ô,Ø„×ÒØð �b”hÐØM¸"¼(ÐMÐMÐMð	
ðñô ðRð Rñô ñ -Ô,ðRð „×ÒØ%ð Ø˜ÐØØBð		
ð Ø˜ˆOØØ)ð		
ð 
�z 3Ð'¨Ð5TÐUàØ˜ÐØØBð		
ð Ø˜ˆOØØ)ð		
ð 
�Z Ð% zÐ3RÐSð5ñô ð>ð ñ?ô ð>ð „×Ò˜ Ð5GÐÑHÔHðð ñ IÔHðð" „×Ò˜Ð5Ð5Ð5Ñ6Ô6ð)ð )ñ 7Ô6ð)ðX „×ÒØ&à	!Ð#3Ð4Ø	$Ð&9Ð:Ø	  /Ð2ðð
 	GÐFÐFð ñ ô ð „×ÒØÐDÐDÐDñô ð „×ÒÐ,¨u°d¨mÑ<Ô<Ø„×ÒØ(Ø-Ð-Ñ/Ô/ñô ðPð Pñ	ô ñ =Ô<ñô ñô ð"Pðf „×ÒØ(Ø-Ð-Ñ/Ô/ñô ð
ð 
ñ	ô ð
ð8
ð 
ð 
ð 
ð 
r.   