§
    ¨éUg½  ã                   ó”  — 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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 d dlm Z  d d	l!m"Z"m#Z# d d
l$m%Z%  e& ej'        ¦   «         ¦  «        Z(d„ e(D ¦   «         Z)e) ed¬¦  «         ed¬¦  «         ed¬¦  «         ed ¬¦  «         ed¬¦  «         ed¬¦  «         ed¬¦  «         ed ¬¦  «         ed¬¦  «         ed¬¦  «         ed¬¦  «        gz  Z)d„ Z*	 d”d„Z+d„ Z,ej-         .                    de)e*¬¦  «        d„ ¦   «         Z/ e¦   «         g d¢ej0         ej0        gf e¦   «         g d¢ej0         ej0        gf e¦   «         g d¢ej0         ej0        gf e¦   «         g d¢ej0         ej0        gf e¦   «         ddgej0         d d!ej0        gf e¦   «         ddgej0         d d!d ej0        gf ed ¬¦  «        ddgej0         ej0        gf ed ¬¦  «        ddgej0         ej0        gf ed"¬¦  «        ddgej0         d d!ej0        gf ed¬¦  «        ddgej0         d d!d ej0        gf ed#¬¦  «        ddgej0         d d!d ej0        gf ed ¬¦  «        ddgej0         ej0        gf ed ¬¦  «        g d$¢ej0         ej0        gf ed"¬¦  «        ddgej0         d d!ej0        gf ed¬¦  «        ddgej0         d d!d ej0        gf ed#¬¦  «        ddgej0         d d!d ej0        gf e¦   «         g d%¢ej0         d&dej0        gf e¦   «         g ej0         d&d'ej0        gfgZ1 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
Z2 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	Z3ej-         .                    d-e1e2z   ¦  «        d.„ ¦   «         Z4ej-         .                    d/e1e3z   ¦  «        d0„ ¦   «         Z5ej-         .                    d1g  e¦   «         d2d3d4d5df‘ e¦   «         d2d3d6d2df‘ ed,¬¦  «        d2d3dd,df‘ ed¬¦  «        d2d3dddf‘ ed¬¦  «        d3d2d2d7df‘ ed,d#¬8¦  «        d2d3d9ddf‘ ed,d#¬8¦  «        d2dd:ddf‘ e¦   «         d: ej6        d5¦  «        d5d ej6        d5¦  «        z  z
  dd5f‘ e¦   «         d: ej6        d5¦  «         ej6        d5¦  «        d,z   d,d,f‘ ed#¬¦  «        d: ej6        d5¦  «        d;ddf‘ ed¬¦  «        d:d6dd ej6        d¦  «        z  z
  ddf‘ ed¬¦  «        d:d6 ej6        d¦  «        d,z
  ddf‘ ed#¬¦  «        d:d6d<ddf‘ e¦   «         d ej6        d5¦  «         ej7        d5¦  «        d ej6        d5¦  «        z  z
  ddf‘ e¦   «         d=d>d d d f‘ e¦   «         d2d>d?d&d f‘ e¦   «         d=d@d d d f‘ e¦   «         d2d@dAd&d f‘ e¦   «         d2dBdCd&d f‘ e¦   «         d2dDdEdFdGf‘ e¦   «         d=dDgdGgd#z  ¢R ‘ e¦   «         d2dHdIdFdJf‘ e¦   «         d=dHgdJgd#z  ¢R ‘ e¦   «         d=dKdEdLdGf‘ e¦   «         d2dKgdMgd#z  ¢R ‘ e¦   «         d=dCdCddNf‘ e¦   «         d=dOdOddPf‘ e¦   «         d2d?d d d f‘ e¦   «         d=d?d?dd f‘ e¦   «         d2dOd dQdPf‘ e¦   «         d2dRd d d f‘ e¦   «         d2dAd d d f‘ e¦   «         d=dAdAdd f‘ ed#¬S¦  «        d=g dT¢ eg dT¢¦  «        dUz
  ddf‘ ed#¬S¦  «        d2g dT¢ eg dT¢¦  «        d,z
  ddf‘ ed#¬S¦  «        d:g dT¢ eg dT¢¦  «        dVz
  ddf‘ ed#¬S¦  «        d:g dW¢ eg dW¢¦  «        dXz
  ddf‘e*¬¦  «        dY„ ¦   «         Z8ej-         .                    de(¦  «        ej-         .                    dZd[d\g¦  «        ej-         .                    d]ej9        ej:        g¦  «        ej-         .                    d^ej9        ej:        g¦  «        ej-         .                    d_ddg¦  «        ej-         .                    d`ddg¦  «        ej-         .                    daddg¦  «        ej-         .                    dbddg¦  «        dc„ ¦   «         ¦   «         ¦   «         ¦   «         ¦   «         ¦   «         ¦   «         ¦   «         Z;ej-         .                    de)e*¬¦  «        ej-         .                    d_dddg¦  «        de„ ¦   «         ¦   «         Z<ej-         .                    de)e*¬¦  «        ej-         .                    d_dddg¦  «        df„ ¦   «         ¦   «         Z=ej-         .                    de)e*¬¦  «        ej-         .                    d_dgdhg¦  «        di„ ¦   «         ¦   «         Z>ej-         .                    de)e*¬¦  «        dj„ ¦   «         Z?ej-         .                    de)e*¬¦  «        ej-         .                    d_dddg¦  «        dk„ ¦   «         ¦   «         Z@ej-         .                    de)e*¬¦  «        ej-         .                    d_dddg¦  «        dl„ ¦   «         ¦   «         ZAej-         .                    dmg dn¢¦  «        e#do„ ¦   «         ¦   «         ZBej-         .                    de)e*¬¦  «        ej-         .                    d_dddg¦  «        dp„ ¦   «         ¦   «         ZCej-         .                    dq e¦   «         ejD        drf e¦   «         ejE        drf ed¬¦  «        ds„ drf e¦   «         ejD        dtf e¦   «         ejD        duf e¦   «         ejD        duf e¦   «         ejD        dvfg¦  «        dw„ ¦   «         ZFdx„ ZGdy„ ZHej-         .                    dz ejI        g d{¢¦  «         ejI        g d|¢¦  «        f¦  «        ej-         .                    d} ejI        g d~¢¦  «         ejI        g d¢¦  «        f¦  «        d€„ ¦   «         ¦   «         ZJej-         .                    de)e*¬¦  «        d�„ ¦   «         ZKej-         .                    de(¦  «        ej-         .                    d_dddg¦  «        ej-         .                    d‚ej9        ej:        f¦  «        ej-         .                    dƒd„¦  «        d…„ ¦   «         ¦   «         ¦   «         ¦   «         ZLej-         .                    de(¦  «        ej-         .                    d†d‚ejM        id‡ejM        › dˆ�fg¦  «        d‰„ ¦   «         ¦   «         ZNej-         .                    dŠed‹dieOdŒfed‹d iePd�fed‹d'iePdŽfed‹dieOdŒfed‹d iePd�fed‹d'iePdŽfg¦  «        d�„ ¦   «         ZQej-         .                    de)e*¬¦  «        d�„ ¦   «         ZRej-         .                    d‘g d’¢¦  «        d“„ ¦   «         ZSdS )•é    N)Úassert_allcloseÚassert_array_equal)Úapprox)ÚLinearConstraintÚminimizeÚminimize_scalarÚnewton)Ú	logsumexp)ÚIdentityLinkÚ_inclusive_low_high)Ú_LOSSESÚAbsoluteErrorÚBaseLossÚHalfBinomialLossÚHalfGammaLossÚHalfMultinomialLossÚHalfPoissonLossÚHalfSquaredErrorÚHalfTweedieLossÚHalfTweedieLossIdentityÚ	HuberLossÚPinballLoss)Úassert_all_finite)Úcreate_memmap_backed_dataÚskip_if_32bit)Ú_IS_WASMc                 ó"   — g | ]} |¦   «         ‘ŒS © r   )Ú.0Úlosss     ú\/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/sklearn/_loss/tests/test_loss.pyú
<listcomp>r"   $   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=ú)Úclossr'   z(power=)Ú
isinstancer   Ú	__class__Ú__name__r   r-   r$   r   Úhasattrr'   Ústr)Úparamr    Únames      r!   Úloss_instance_namer5   5   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   r(   )ÚlowÚhighÚsizeN©r@   é   )ÚnpÚrandomÚRandomStateÚis_multiclassÚemptyÚ	n_classesÚuniformÚflatÚarangeÚastypeÚfloatr.   Úlinkr   r   Úinterval_y_predÚamaxÚaminÚinterval_y_trueÚmaxÚminr>   Úlow_inclusiver?   Úhigh_inclusive)
r    Ú	n_samplesÚy_boundÚ	raw_boundÚseedÚrngÚraw_predictionÚy_truer>   r?   s
             r!   Úrandom_y_true_raw_predictionr^   D   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_valuer)   é   ç      (@)rC   Ú	full_like)ÚfuncÚxÚepsÚhÚ
f_minus_2hÚ
f_minus_1hÚ	f_plus_1hÚ	f_plus_2hs           r!   Únumerical_derivativerl   i   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.rB   r   r(   ©Únumé
   Nç      à?r)   ©r]   r\   )rF   rC   ÚtileÚlinspacer   rR   rU   Úr_r>   rV   r?   Úin_y_true_rangeÚshaperO   rG   Úin_y_pred_rangerN   r    )r    rH   r]   r>   r?   ÚnÚy_predr\   s           r!   Útest_loss_boundaryr|   w   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#   )r7   r   çš™™™™™¹?r8   r}   r8   éýÿÿÿçš™™™™™¹¿ç      ø?rB   )r~   r   r   r}   r8   )r}   rr   çÍÌÌÌÌÌì?éÿÿÿÿgš™™™™™ñ?)r7   r   r   r7   )ç        ç      ð?r)   )r~   r   r   rr   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)rw   rC   Ú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)ry   rC   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      @ra   é   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@©rH   )çš™™™™™É?rr   ç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.rs   çVçž¯Ò<)ÚrelÚabsN)rC   r†   ÚgradientÚloss_gradientÚgradient_hessianr   )r    r]   r\   Ú	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                 ó  — t           r|rt          j        d¬¦  «          | ¦   «         } d}t          | |ddd¬¦  «        \  }	}
|	                     |¦  «        }	|
                     |¦  «        }
|�t          j        d	g|z  |¬
¦  «        }|�t          j        |	|¬
¦  «        }|�t          j        |
|¬
¦  «        }|r/t          |	¦  «        }	t          |
¦  «        }
|�t          |¦  «        }|  	                    |	|
|||¬¦  «         |  
                    |	|
|||¬¦  «         |                      |	|
||||¬¦  «         |�| j        rt          j        |
|¬
¦  «        }|                      |	|
||||¬¦  «          | |	|
|¬¦  «         |                      |	|¬¦  «         |                      |	|¬¦  «         t!          | d¦  «        r|                      |
¬¦  «         t!          | d¦  «        r|                      |	|
||||¬¦  «         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.
    zmemmap not fully supported)Úreasonr;   r6   ©éöÿÿÿrq   r<   ©r    rW   rX   rY   rZ   Nr’   ©Údtype)r]   r\   r¬   Úloss_outr¯   )r]   r\   r¬   Úgradient_outr¯   )r]   r\   r¬   r·   r¸   r¯   )r]   r\   r¬   r¸   Úhessian_outr¯   ©r]   r\   r¬   ©r]   r¬   Úpredict_proba)r\   Úgradient_proba)r]   r\   r¬   r¸   Ú	proba_outr¯   )r   ÚpytestÚxfailr^   rL   rC   r†   Ú
empty_liker   r    rœ   r�   rF   rž   Úfit_intercept_onlyÚconstant_to_optimal_zeror1   r¼   r½   )r    r©   rª   r«   r¬   r­   r®   r¯   rW   r]   r\   s              r!   Útest_loss_dtyperÄ   w  s´  € õ$ ð :�Oð :ÝŒÐ8Ð9Ñ9Ô9Ð9àˆ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à‡I‚IØØ%Ø#ØØð ñ ô ð ð 	‡M‚MØØ%Ø#ØØð ñ ô ð ð 	×ÒØØ%Ø#ØØØð ñ ô ð ð Ð˜DÔ.ÐÝŒ}˜^°9Ð=Ñ=Ô=ˆØ×ÒØØ%Ø#ØØØð ñ ô ð ð 	€D� ~À]ÐSÑSÔSÐSØ×Ò 6¸ÐÑGÔGÐGØ×!Ò!¨¸}Ð!ÑMÔMÐMÝˆt�_Ñ%Ô%ð :Ø×Ò¨.ÐÑ9Ô9Ð9ÝˆtÐ%Ñ&Ô&ð 
Ø×ÒØØ)Ø'ØØØð 	ñ 	
ô 	
ð 	
ð 	
ð 	
ð
ð 
r#   Ú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                             ||||¬
¦  «        f t          ||¦  «         |                      ||||¬¦  «         | j                             ||||¬¦  «         t          ||¦  «         | j         	                    |||||¬¦  «         | j         	                    |||||¬¦  «         t          ||¦  «         t          ||¦  «         |  
                    |||||¬¦  «         | j         
                    |||||	¬¦  «         t          ||¦  «         t          ||	¦  «         dS )z:Test that Python and Cython functions return same results.é   r6   r²   r<   r´   rÅ   r(   r   ro   ©r]   r\   r¬   r·   ©r]   r\   r¬   r¸   ©r]   r\   r¬   r·   r¸   ©r]   r\   r¬   r¸   r¹   N)r^   rC   ru   rx   rÁ   r    r-   r   rœ   r�   rž   )
r    r¬   r]   r\   Ú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Ç   r6   r²   r´   rÅ   r(   r   ro   rÈ   rÉ   rÊ   rË   r½   ©r]   r\   r¬   r¸   r¾   ©Úaxisç•dyáý¥=)ÚrtolN)r^   rC   ru   rx   rÁ   r    rœ   r�   rž   r   r   Úshares_memoryr1   rF   r½   Úsum)r    r¬   Úglobal_random_seedr]   r\   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#   ÚonesrD   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.
    r8   r6   r9   r´   ré   )rx   r¶   rA   rº   N)r^   rC   ré   Úfloat64rD   rE   ÚnormalrL   r   r    r�   rF   rž   )r    r¬   rÛ   rW   r]   r\   r[   Úlossesrœ   Ú	losses_swÚgradient_swÚhessianÚ
hessian_sws                r!   Útest_sample_weight_multipliesrò   w  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Ç   r6   r²   r<   r´   r(   Nrs   )r^   Úndimr   r    r�   rœ   rž   )r    r]   r\   Ú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}   rB   rq   ç»½×Ùß|Û=rq   )rx   r`   r¶   Nr(   rÅ   r   ro   rº   r»   ç›+¡†›„=r™   )ÚatolrØ   )rF   rC   r†   r.   rN   r   rO   r>   rU   r?   rV   ÚclipÚinverserK   rH   rL   rM   ÚfullÚexprJ   ru   rx   r    rÃ   r   )	r    r¬   r\   rf   r>   r?   r]   Ú
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Ç   r6   r9   r´   rÅ   r(   r   ro   rº   c                 ó4   •— ‰                      ‰| ‰¬¦  «        S ©Nrº   )r    ©re   r    r¬   r]   s    €€€r!   Ú	loss_funcz6test_gradients_hessians_numerically.<locals>.loss_func.  s'   ø€ Ø—9’9ØØ Ø+ð ñ ô ð r#   g�íµ ÷Æ°>)rf   çñhãˆµøÔ>rø   ©rØ   rú   c                 ó4   •— ‰                      ‰| ‰¬¦  «        S r  ©rœ   r  s    €€€r!   Ú	grad_funcz6test_gradients_hessians_numerically.<locals>.grad_func8  s'   ø€ Ø—=’=ØØ Ø+ð !ñ ô ð r#   c                 ón   •— ‰                      ¦   «         }| |d d …‰f<   ‰                     ‰|‰¬¦  «        S r  )Úcopyr    ©re   ÚrawÚkr    r\   r¬   r]   s     €€€€€r!   r  z6test_gradients_hessians_numerically.<locals>.loss_funcM  sI   ø€ Ø$×)Ò)Ñ+Ô+�Ø��A�A�A�q�D‘	Ø—y’yØ!Ø#&Ø"/ð !ñ ô ð r#   Ngñhãˆµøä>c                 ó‚   •— ‰                      ¦   «         }| |d d …‰f<   ‰                     ‰|‰¬¦  «        d d …‰f         S r  )r  rœ   r  s     €€€€€r!   r  z6test_gradients_hessians_numerically.<locals>.grad_funcY  s[   ø€ Ø$×)Ò)Ñ+Ô+�Ø��A�A�A�q�D‘	Ø—}’}Ø!Ø#&Ø"/ð %ñ ô ð �!�!�Q�$ô	ð r#   )r^   rC   ru   rx   rž   rF   rl   r   Úapprox_hessianrÅ   rH   )r    r¬   rÛ   rW   Úgrg   r  Ú	g_numericr  Ú	h_numericr  r\   r]   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       Àr<   )r  g     @]@gÍÌÌÌÌÌð?)r  rƒ   rƒ   )Úbinomial_lossr–   r}   )r  iôÿÿÿr•   )r  é   r�   )Úpoisson_lossrb   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µ   re   Ú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.
        rs   ©r]   )r    rÃ   ©re   r    r]   s    €€r!   rd   ztest_derivatives.<locals>.funcˆ  s>   ø€ ð �yŠyØ¨!ð ñ 
ô 
à×)Ò)°Ð)Ñ8Ô8ñ9ð 	9r#   c                 ó2   •— ‰                      ‰| ¬¦  «        S )Nrs   r
  r   s    €€r!   Úfprimez test_derivatives.<locals>.fprime’  s   ø€ Ø�}Š} F¸1ˆ}Ñ=Ô=Ð=r#   c                 ó>   •— ‰                      ‰| ¬¦  «        d         S )Nrs   r(   )rž   r   s    €€r!   Úfprime2z!test_derivatives.<locals>.fprime2•  s!   ø€ Ø×$Ò$¨FÀ1Ð$ÑEÔEÀaÔHÐHr#   r8   gH¯¼šò×j>)Úx0r"  r$  ÚmaxiterÚtolr   rù   ©rú   rs   g�íµ ÷Æ >)r   rC   r†   rë   Úndarrayr	   Úravelr   rN   rü   rœ   )r    r%  r]   rd   r"  r$  Úoptimums   ` `    r!   Útest_derivativesr,  j  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�   ro   r   Nr;   rÅ   r}   r)   r»   c                 óº   •— ‰j         st          j        ‰| ¬¦  «        }n/t          j        t          j        | ‰‰j        f¬¦  «        ¦  «        } ‰‰|‰¬¦  «        S )N)rx   r`   ©rx   rº   )rF   rC   rý   ÚascontiguousarrayÚbroadcast_torH   )re   r\   r    rW   r¬   r]   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>r&  r8   )r'  Úoptionsrº   ©rš   gê-�™—q=)r›   g‚vIhÂ%<=ÚSLSQPr(   )r'  r5  ÚmethodÚconstraintsr  r  rÕ   r(  )rF   rN   rü   rC   ru   rK   rL   rë   rH   rÂ   r   rœ   rc   rx   Útupler¶   r   r   re   rÚ   r   Úzerosr   ré   rt   r   )r    r¬   Úar4  ÚoptÚgradrW   r]   s   ``    @@r!   Útest_loss_intercept_onlyr?  ª  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)rC   Ú
percentile)re   s    r!   ú<lambda>rD  ò  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.
    rG  r(   rr   r8   rA   r  N)rC   rD   rE   rG  ÚgetattrrÂ   r   r   rN   rü   r.   r   r   rR   rU   Úfillr>   rV   r?   )r    rd   Úrandom_distrÛ   r[   Úy_trainÚbaseline_predictions          r!   Ú test_specific_fit_intercept_onlyrN  í  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”   r(   r8   rA   r  rµ   Nrq   r1  )rC   rD   rE   r   ÚrandintrL   rë   rÂ   rx   r;  r¶   rÅ   Úmeanr   ÚlogrN   ré   r   )r[   rH   r    rL  rM  Úpr  s          r!   Ú(test_multinomial_loss_fit_intercept_onlyrT    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                 óê  — 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Ç   r)   r”   r   rA   g      à¿Nrr   r(   rs   )rC   rD   rE   r   r   rP  rL   rë   rì   rG   r   r    )rÛ   r[   rW   ÚbinomÚmultinomrL  r\   Úraw_multinoms           r!   Ú"test_binomial_and_multinomial_lossrY  /  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#   r]   )rƒ   r   r   )r„   r(   r(   r{   )g      Àr:   r:   )r*   rB   rB   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 ©Nr)   r(   )rC   rQ  rR  rþ   ©r‰   Úraw_predÚzs      r!   Úalt_lossz:test_binomial_vs_alternative_formulation.<locals>.alt_lossQ  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 r\  )rC   rþ   r]  s      r!   Úalt_gradientz>test_binomial_vs_alternative_formulation.<locals>.alt_gradientU  s/   € à�‰E�A‰IˆØˆr�Q�œ  H¡Ñ-Ô-Ñ-Ñ.Ð.r#   N)r   rL   r   r   rœ   )r]   r{   Úglobal_dtyper`  rb  Úbin_lossÚdatums          r!   Ú(test_binomial_vs_alternative_formulationrf  @  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Ç   r6   r9   r´   r¼   r(   rÕ   r×   r6  r½   )NNNrÔ   rÉ   )r^   r1   r¼   rx   rH   rC   rÚ   r   rÁ   r½   r   rœ   )r    rÛ   rW   r]   r\   rç   r>  s          r!   Útest_predict_probarh  d  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.
    r;   rÅ   r  )rW   r¶   ri  )r(   rj  N)rC   ré   Úinit_gradient_and_hessianÚconstant_hessianrx   rF   rH   r¶   ÚflagsÚc_contiguousÚf_contiguous)r    r¬   r¶   ri  rW   rœ   rð   s          r!   Útest_init_gradient_and_hessiansrr  �  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.©ÚmatchrW   r;   Nr   )r¿   ÚraisesÚ
ValueErrorÚ	TypeErrorrm  )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.rt  Nr   )r¿   rv  )r    ry  Úerr_typerz  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Ç   r6   r9   r<   r´   rs   N)r^   ÚpickleÚdumpsÚloadsr   )r    rW   r]   r\   Ú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#   rS  )r%   r   r(   r€   r)   rB   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.r&   rq   r<   )r    rW   rZ   rs   r)   N)	r   r   r^   rN   rü   r    rÃ   r   rž   )rS  Úhalf_tweedie_logÚhalf_tweedie_identityrW   r]   r\   r{   Úloss_logÚloss_identityÚgradient_logÚhessian_logÚgradient_identityÚhessian_identitys                r!   Ú%test_tweedie_log_identity_consistencyr�     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#   )r6   r9   r<   )Tr€  ÚnumpyrC   r¿   Únumpy.testingr   r   r   Úscipy.optimizer   r   r   r	   Úscipy.specialr
   Úsklearn._loss.linkr   r   Úsklearn._loss.lossr   r   r   r   r   r   r   r   r   r   r   r   Úsklearn.utilsr   Úsklearn.utils._testingr   r   Úsklearn.utils.fixesr   ÚlistÚvaluesÚ
ALL_LOSSESÚLOSS_INSTANCESr5   r^   rl   ÚmarkÚparametrizer|   ÚinfÚY_COMMON_PARAMSÚY_TRUE_PARAMSÚY_PRED_PARAMSrŠ   r�   rR  Úlog1pr¨   Úfloat32rë   rÄ   rÒ   rè   rò   rö   r  r  r,  r?  rQ  ÚmedianrN  rT  rY  r†   rf  rh  rr  Úint64r{  rx  rw  r~  r…  r�  r   r#   r!   ú<module>r§     s�  ðØ €€€à Ð Ð Ð Ø €€€Ø =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð $Ð #Ð #Ð #Ð #Ð #à @Ð @Ð @Ð @Ð @Ð @Ð @Ð @ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ,Ð +Ð +Ð +Ð +Ð +Ø KÐ KÐ KÐ KÐ KÐ KÐ KÐ KØ (Ð (Ð (Ð (Ð (Ð (àˆ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¨Ð/ð€ð „×ÒØ'¨¸=Ñ)Hñô ð7ð 7ñô ð7ð „×ÒØ'¨¸=Ñ)Hñô ð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Ñ-Ô-ðT
ð T
ñ .Ô-ñ ,Ô+ñ ,Ô+ñ 5Ô4ñ @Ô?ñ ?Ô>ñ ;Ô:ñ -Ô,ðT
ðn „×Ò˜ Ð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ð)ð )ð )r#   