Ë
    8Ò^j¿Ù  ã                   óÂ  — 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jl                  «       «      Z7e7D � cg c]	  }  | «       ‘Œ c} 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jx                  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jx                  j{                  d,e@eAz   «      d-„ «       ZCejx                  j{                  d.e@eBz   «      d/„ «       ZDejx                  j{                  d0g  e#«       d1d2d3d4df‘ e«       d1d2d5d1df‘ e'd+¬«      d1d2dd+df‘ e'd¬«      d1d2dddf‘ e'd¬«      d2d1d1d6df‘ e&d+d"¬7«      d1d2d8ddf‘ e&d+d"¬7«      d1dd9ddf‘ e!«       d9 ejŠ                  d4«      d4d ejŠ                  d4«      z  z
  dd4f‘ e«       d9 ejŠ                  d4«       ejŠ                  d4«      d+z   d+d+f‘ e$d"¬«      d9 ejŠ                  d4«      d:ddf‘ e%d¬«      d9d5dd ejŠ                  d«      z  z
  ddf‘ e%d¬«      d9d5 ejŠ                  d«      d+z
  ddf‘ e%d"¬«      d9d5d;ddf‘ e«       d ejŠ                  d4«       ejŒ                  d4«      d ejŠ                  d4«      z  z
  ddf‘ e«       d<d=d d d f‘ e«       d1d=d>d%d f‘ e«       d<d?d d d f‘ e«       d1d?d@d%d f‘ e«       d1dAdBd%d f‘ e«       d1dCdDdEdFf‘ e«       d<dCgdFgd"z  ¢­‘ e«       d1dGdHdEdIf‘ e«       d<dGgdIgd"z  ¢­‘ e«       d<dJdDdKdFf‘ e«       d1dJgdLgd"z  ¢­‘ e«       d<dBdBddMf‘ e«       d<dNdNddOf‘ e«       d1d>d d d f‘ e«       d<d>d>dd f‘ e«       d1dNd dPdOf‘ e«       d1dQd d d f‘ e«       d1d@d d d f‘ e«       d<d@d@dd f‘ ed"¬R«      d<g dS¢ eg dS¢«      dTz
  ddf‘ ed"¬R«      d1g dS¢ eg dS¢«      d+z
  ddf‘ ed"¬R«      d9g dS¢ eg dS¢«      dUz
  ddf‘ ed"¬R«      d9g dV¢ eg dV¢«      dWz
  ddf‘e9¬«      dX„ «       ZGejx                  j{                  de7«      ejx                  j{                  dYdZd[g«      ejx                  j{                  d\ej�                  ej’                  g«      ejx                  j{                  d]ej�                  ej’                  g«      ejx                  j{                  d^ddg«      ejx                  j{                  d_ddg«      ejx                  j{                  d`ddg«      ejx                  j{                  daddg«      db„ «       «       «       «       «       «       «       «       ZJejx                  j{                  de8e9¬«      ejx                  j{                  d^ddcg«      dd„ «       «       ZKejx                  j{                  de8e9¬«      ejx                  j{                  d^ddcg«      de„ «       «       ZLejx                  j{                  de8e9¬«      ejx                  j{                  d^dfdgg«      dh„ «       «       ZMejx                  j{                  de8e9¬«      di„ «       ZNejx                  j{                  de8e9¬«      ejx                  j{                  d^ddcg«      dj„ «       «       ZOejx                  j{                  de8e9¬«      ejx                  j{                  d^ddcg«      dk„ «       «       ZPejx                  j{                  dlg dm¢«      e4dn„ «       «       ZQejx                  j{                  de8e9¬«      ejx                  j{                  d^ddcg«      do„ «       «       ZRejx                  j{                  dp e#«       ej¦                  dqf e«       ej¨                  dqf e'd¬«      dr„ dqf e!«       ej¦                  dsf e«       ej¦                  dtf e$«       ej¦                  dtf e«       ej¦                  dufg«      dv„ «       ZUdw„ ZVdx„ ZWdy„ ZXejx                  j{                  dz ej²                  g d{¢«       ej²                  g d|¢«      f«      ejx                  j{                  d} ej²                  g d~¢«       ej²                  g d¢«      f«      d€„ «       «       ZZejx                  j{                  de8e9¬«      d�„ «       Z[ejx                  j{                  de7«      ejx                  j{                  d^ddcg«      ejx                  j{                  d‚ej�                  ej’                  f«      ejx                  j{                  dƒd„«      d…„ «       «       «       «       Z\ejx                  j{                  de7«      ejx                  j{                  d†d‚ejº                  id‡ejº                  › dˆ�fg«      d‰„ «       «       Z^ejx                  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jx                  j{                  de8e9¬«      d�„ «       Zbejx                  j{                  d‘g d’¢«      d“„ «       Zcejx                  j{                  d”eefe efe"e!fgg d•¢¬«      ejx                  j{                  d–g d—¢«      ejx                  j{                  d˜dZd[g«      ejx                  j{                  d™ e.«       «      dš„ «       «       «       «       Zdejx                  j{                  d™ e.«       «      d›„ «       Zedœ„ Zfyc c} w )žé    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_32bitg      Ð?)Úquantileg      è?ç      ø¿©Úpoweré   é   ç      @c                 ó�  — t        | t        «      r¬| }|j                  j                  }t        |t        «      r|d|j
                  j                  › d�z  }|S t        |t        «      r|d|j                  › �z  }|S t        |d«      r3t        |j
                  d«      r|d|j
                  j                  › d�z  }|S t        | «      S )Nz
(quantile=ú)Úclossr+   z(power=)Ú
isinstancer   Ú	__class__Ú__name__r   r1   r(   r   Úhasattrr+   Ústr)ÚparamÚlossÚnames      úh/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/sklearn/_loss/tests/test_loss.pyÚloss_instance_namer;   G   s½   € Ü�%œÔ"ØˆØ�~‰~×&Ñ&ˆÜ�dœKÔ(Ø�j §¡×!4Ñ!4Ð 5°QÐ7Ñ7ˆDð
 ˆô	 ˜œiÔ(Ø�j §¡ Ð0Ñ0ˆDð ˆô �T˜7Ô#¬°·
±
¸GÔ(DØ�g˜dŸj™j×.Ñ.Ð/¨qÐ1Ñ1ˆDØˆä�5‹zÐó    c                 ó   — t         j                  j                  |«      }| j                  rŽt        j                  || j
                  f«      }|j                  |d   |d   || j
                  z  ¬«      |j                  dd t        j                  |«      j                  t        «      | j
                  z  }||fS t        | j                  t        «      rPt        | j                  «      \  }}	t        j                   ||d   g«      }t        j"                  |	|d   g«      }	||	f}|j                  |d   |d   |¬«      }t        | j$                  «      \  }}	t'        ||d   «      }t)        |	|d   «      }	|j                  ||	|¬«      }| j$                  j*                  dk(  r!| j$                  j,                  rd|dd|dz  …<   | j$                  j.                  dk(  r!| j$                  j0                  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Úfloatr2   Úlinkr   r   Úinterval_y_predÚamaxÚaminÚinterval_y_trueÚmaxÚminr>   Úlow_inclusiver?   Úhigh_inclusive)
r8   Ú	n_samplesÚy_boundÚ	raw_boundÚseedÚrngÚraw_predictionÚy_truer>   r?   s
             r:   Úrandom_y_true_raw_predictionr^   V   sá  € ô �)‰)×
Ñ
 Ó
%€CØ×ÒÜŸ™ 9¨d¯n©nÐ"=Ó>ˆØ!$§¡Ø˜!‘Ø˜1‘Ø˜TŸ^™^Ñ+ð "-ó "
ˆ×Ñ™AÐô
 —‘˜9Ó%×,Ñ,¬UÓ3°d·n±nÑDˆð, �>Ð!Ð!ô' �d—i‘i¤Ô.Ü+¨D×,@Ñ,@ÓA‰IˆC�Ü—'‘'˜3 	¨!¡Ð-Ó.ˆCÜ—7‘7˜D )¨A¡,Ð/Ó0ˆDØ˜d˜ˆIØŸ™Ø˜!‘ 9¨Q¡<°ið %ó 
ˆô (¨×(<Ñ(<Ó=‰	ˆˆTÜ�#�w˜q‘zÓ"ˆÜ�4˜ ™Ó$ˆØ—‘˜S $¨Y�Ó7ˆà×Ñ×#Ñ# qÒ(¨T×-AÑ-A×-OÒ-OØ*+ˆFÑ&�y A‘~Ð&Ñ'Ø×Ñ×$Ñ$¨Ò)¨d×.BÑ.B×.QÒ.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   {   sy   € ô 	�‰�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<   r8   )Úidsc                 óà  — | j                   r2d}t        j                  t        j                  d|dz
  |¬«      d«      }n0t	        | j
                  «      \  }}t        j                  ||d¬«      }| j
                  j                  r)t        j                  || j
                  j                  f   }| j
                  j                  r)t        j                  || j
                  j                  f   }| j                  |«      sJ ‚|j                  d   }t	        | j                  «      \  }}| j                   rct        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                  |||¬«      }| j                  |«      sJ ‚| j                   j!                  |«      }| j#                  ||¬	«       y)
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   r8   )r8   rH   r]   r>   r?   ÚnÚy_predr\   s           r:   Útest_loss_boundaryr|   ‰   s©  € ð ×ÒØˆ	Ü—‘œŸ™ Q¨	°A©¸9ÔEÀqÓI‰ä'¨×(<Ñ(<Ó=‰	ˆˆTÜ—‘˜S $¨BÔ/ˆð ×Ñ×)Ò)Ü—‘�v˜t×3Ñ3×7Ñ7Ð7Ñ8ˆØ×Ñ×*Ò*Ü—‘�v˜t×3Ñ3×8Ñ8Ð8Ñ9ˆà×Ñ Ô'Ð'Ð'à�‰�Q‰€AÜ# D×$8Ñ$8Ó9�I€CˆØ×ÒÜ—‘˜1˜i˜.Ó)ˆÜ—{‘{ 3¨°!Ô4ˆŠq�!ˆt‰Ø˜a &ª¨A¨¡,Ñ.Ñ/ˆŠq�!ˆt‰Ø˜a &ª¨A¨¡,Ñ.Ñ/ˆŠq�!ˆtŠä—‘˜S $¨AÔ.ˆà×Ñ Ô'Ð'Ð'ð —Y‘Y—^‘^ FÓ+€NØ‡I�I�V¨N€IÕ;r<   )éœÿÿÿr   çš™™™™™¹?éd   r~   r   éýÿÿÿçš™™™™™¹¿ç      ø?rB   )r€   r�   r   r~   r   )r~   rr   çÍÌÌÌÌÌì?éÿÿÿÿgš™™™™™ñ?)r}   r�   r   r}   )ç        ç      ð?r-   )r€   r�   r   rr   z!loss, y_true_success, y_true_failc                 ó¼   — |D ])  }| j                  t        j                  |g«      «      rŒ)J ‚ |D ])  }| j                  t        j                  |g«      «      sŒ)J ‚ y)z-Test boundaries of y_true for loss functions.N)rw   rC   Úarray)r8   Úy_true_successÚy_true_failÚys       r:   Útest_loss_boundary_y_truerŒ   à   ó^   € ð ò 3ˆØ×#Ñ#¤B§H¡H¨a¨S£MÕ2Ð2Ð2ð3àò 7ˆØ×'Ñ'¬¯©°!°«Õ6Ð6Ð6ñ7r<   z!loss, y_pred_success, y_pred_failc                 ó¼   — |D ])  }| j                  t        j                  |g«      «      rŒ)J ‚ |D ])  }| j                  t        j                  |g«      «      sŒ)J ‚ y)z-Test boundaries of y_pred for loss functions.N)ry   rC   rˆ   )r8   Ú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«      ¬«      }| j                  t        j                  |g«      t        j                  |g«      ¬«      }| j                  t        j                  |g«      t        j                  |g«      ¬«      \  }}	| j	                  t        j                  |g«      t        j                  |g«      ¬«      \  }
}|t        |dd¬«      k(  sJ ‚|t        |dd¬«      k(  sJ ‚|�9|t        |dd¬«      k(  sJ ‚|	t        |dd¬«      k(  sJ ‚|
t        |dd¬«      k(  sJ ‚|�|t        |dd¬«      k(  sJ ‚yy)z7Test losses, gradients and hessians at specific values.rs   çVçž¯Ò<©ÚrelÚabsN)rC   rˆ   ÚgradientÚloss_gradientÚgradient_hessianr   )r8   r]   r\   Ú	loss_trueÚgradient_trueÚhessian_trueÚloss1Úgrad1Úloss2Úgrad2Úgrad3Úhesss               r:   Útest_loss_on_specific_valuesr«   ø   sb  € ñx œŸ™ & Ó*¼2¿8¹8À^ÐDTÓ;UÔV€EØ�M‰MÜ�x‰x˜˜Ó!´"·(±(¸NÐ;KÓ2Lð ó €Eð ×%Ñ%Ü�x‰x˜˜Ó!´"·(±(¸NÐ;KÓ2Lð &ó �L€Eˆ5ð ×'Ñ'Ü�x‰x˜˜Ó!´"·(±(¸NÐ;KÓ2Lð (ó �K€Eˆ4ð ”F˜9¨%°UÔ;Ò;Ð;Ð;Ø”F˜9¨%°UÔ;Ò;Ð;Ð;àÐ Øœ˜}°%¸UÔCÒCÐCÐCØœ˜}°%¸UÔCÒCÐCÐCØœ˜}°%¸UÔCÒCÐCÐCàÐØ”v˜l°¸5ÔAÒAÐAÑAð  r<   Úreadonly_memmapFTÚdtype_inÚ	dtype_outÚsample_weightÚout1Úout2Ú	n_threadsc                 óî  —  | «       } d}t        | |ddd¬«      \  }	}
|	j                  |«      }	|
j                  |«      }
|�t        j                  dg|z  |¬«      }|�t        j                  |	|¬«      }|�t        j                  |
|¬«      }|r#t        |	«      }	t        |
«      }
|�t        |«      }| j                  |	|
|||¬	«      }|�||u sJ ‚	 | j                  |	|
|||¬
«      }|�||u sJ ‚	 | j                  |	|
||||¬«      \  }}|�||u sJ ‚	 |�||u sJ ‚	 |�#| j                  rt        j                  |
|¬«      }| j                  |	|
||||¬«      \  }}|�||u sJ ‚	 |�||u sJ ‚	  | |	|
|¬«       | j                  |	|¬«       | j                  |	|¬«       t        | d«      r| j                  |
¬«       t        | d«      r-| j                  |	|
||||¬«      \  }}|�||u sJ ‚	 |�||u sJ ‚yyy)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.
    é   ©r}   r   ©éöÿÿÿrq   é*   ©r8   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^   rL   rC   rˆ   Ú
empty_liker&   r8   rŸ   r    rF   r¡   Úfit_intercept_onlyÚconstant_to_optimal_zeror5   rÁ   rÂ   )r8   r¬   r­   r®   r¯   r°   r±   r²   rW   r]   r\   ÚlÚgrg   Úps                  r:   Útest_loss_dtyperÊ   ‹  sª  € ñ$ ‹6€Dà€IÜ9ØØØØØôÑ€FˆNð �]‰]˜8Ó$€FØ#×*Ñ*¨8Ó4€NàÐ ÜŸ™ # ¨Ñ!2¸(ÔCˆØÐÜ�}‰}˜V¨9Ô5ˆØÐÜ�}‰}˜^°9Ô=ˆáÜ*¨6Ó2ˆÜ2°>ÓBˆØÐ$Ü5°mÓDˆMà�	‰	ØØ%Ø#ØØð 	ó 	€Að Ð(ˆ1�‰9Ð2Ð2¨dØ�‰ØØ%Ø#ØØð 	ó 	€Að Ð(ˆ1�‰9Ð2Ð2¨dØ×ÑØØ%Ø#ØØØð ó �D€A€qð Ð(ˆ1�‰9Ð2Ð2¨dØÐ(ˆ1�‰9Ð2Ð2¨dØÐ˜D×.Ò.Ü�}‰}˜^°9Ô=ˆØ× Ñ ØØ%Ø#ØØØð !ó �D€A€qð Ð(ˆ1�‰9Ð2Ð2¨dØÐ(ˆ1�‰9Ð2Ð2¨dÙ� ~À]ÕSØ×Ñ 6¸ÐÔGØ×!Ñ!¨¸}Ð!ÔMÜˆt�_Ô%Ø×Ñ¨.ÐÔ9ÜˆtÐ%Ô&Ø×"Ñ"ØØ)Ø'ØØØð #ó 
‰ˆˆ1ð !Ð,ˆq�D‰yÐ6Ð6°$Ø Ð,ˆq�D‰yÐ6Ð6°$ˆyð 'r<   Úrangec                 óà  — t        | dddd¬«      \  }}|dk(  r2t        j                  d|j                  d   |j                  d   ¬	«      }t        j                  |«      }t        j                  |«      }t        j                  |«      }t        j                  |«      }t        j                  |«      }t        j                  |«      }	| j                  ||||¬
«       | j                  j                  ||||¬
«       t        ||«       | j                  ||||¬«       | j                  j                  ||||¬«       t        ||«       | j                  j                  |||||¬«       | j                  j                  |||||¬«       t        ||«       t        ||«       | j                  |||||¬«       | j                  j                  |||||	¬«       t        ||«       t        ||	«       y)z:Test that Python and Cython functions return same results.é   rµ   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Ä   r8   r1   r   rŸ   r    r¡   )
r8   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¹LÈ¹OÔLˆä�]‰]˜6Ó"€FÜ�]‰]˜6Ó"€FÜ�]‰]˜>Ó*€FÜ�]‰]˜>Ó*€FÜ�]‰]˜>Ó*€FÜ�]‰]˜>Ó*€FØ‡I�IØØ%Ø#Øð	 ô ð 	‡J�J‡O�OØØ%Ø#Øð	 ô ô �F˜FÔ#Ø‡M�MØØ%Ø#Øð	 ô ð 	‡J�J×ÑØØ%Ø#Øð	 ô ô �F˜FÔ#Ø‡J�J×ÑØØ%Ø#ØØð ô ð 	‡J�J×ÑØØ%Ø#ØØð ô ô �F˜FÔ#Ü�F˜FÔ#Ø×ÑØØ%Ø#ØØð ô ð 	‡J�J×ÑØØ%Ø#ØØð  ô ô �F˜FÔ#Ü�F˜FÕ#r<   c                 óF  — t        | ddd|¬«      \  }}|dk(  r2t        j                  d|j                  d   |j                  d   ¬«      }t        j                  |«      }t        j                  |«      }t        j                  |«      }t        j                  |«      }t        j                  |«      }	t        j                  |«      }
| j                  ||||¬	«      }| j                  ||||¬
«      }| j                  |||||¬«      \  }}| 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                  |«      }| j                  |||||¬«      \  }}t        ||«       t        ||«       t        ||«       t        t        j                  |d¬«      dd¬«       yy)z‡Test that loss and gradient are the same across different functions.

    Also test that output arguments contain correct results.
    rÍ   rµ   r¶   r¹   rË   r,   r   ro   rÎ   rÏ   rÐ   rÑ   rÂ   ©r]   r\   r¯   r½   rÃ   ©Úaxisç•dyáý¥=)ÚrtolN)r^   rC   ru   rx   rÄ   r8   rŸ   r    r¡   r   r   Úshares_memoryr5   rF   rÂ   Úsum)r8   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¹LÈ¹OÔ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‘M .Ó1ˆ	Ø×'Ñ'ØØ)Ø'ØØð (ó 
‰	ˆˆEô 	˜˜FÔ#Ü˜˜BÔÜ˜˜yÔ)ÜœŸ™˜u¨1Ô-¨q°uÖ=ð 'r<   ÚonesrD   c           	      ón  — d}t        | |dd|¬«      \  }}|dk(  r&t        j                  |t        j                  ¬«      }nNt        j                  j                  |«      }|j                  |¬«      j                  t        j                  «      }t        | j                  |||¬«      || j                  ||d	¬«      z  «       | j                  ||d	¬«      \  }}| j                  |||¬«      \  }	}
t        ||z  |	«       | j                  st        ||z  |
«       nt        ||d	d	…d	f   z  |
«       | j                  ||d	¬«      \  }}| j                  |||¬«      \  }
}| j                  st        ||z  |
«       t        ||z  |«       y	t        ||d	d	…d	f   z  |
«       t        ||d	d	…d	f   z  |«       y	)
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.
    r   rµ   ©éûÿÿÿr´   r¹   rï   )rx   r»   rA   r¿   N)r^   rC   rï   Úfloat64rD   rE   ÚnormalrL   r   r8   r    rF   r¡   )r8   r¯   rá   rW   r]   r\   r[   ÚlossesrŸ   Ú	losses_swÚgradient_swÚhessianÚ
hessian_sws                r:   Útest_sample_weight_multipliesrú   �  së  € ð €IÜ9ØØØØØôÑ€FˆNð ˜ÒÜŸ™ i´r·z±zÔB‰ä�i‰i×#Ñ#Ð$6Ó7ˆØŸ
™
¨	˜
Ó2×9Ñ9¼"¿*¹*ÓEˆäØ�	‰	ØØ)Ø'ð 	ó 	
ð
 	Ø
�)‰)ØØ)Øð ó 
ñ	
ôð ×)Ñ)ØØ%Øð *ó Ñ€FˆHð
 "×/Ñ/ØØ%Ø#ð 0ó Ñ€Iˆ{ô
 �F˜]Ñ*¨IÔ6Ø×ÒÜ˜ =Ñ0°+Õ>ä˜ =²°D°Ñ#9Ñ9¸;ÔGà×-Ñ-ØØ%Øð .ó Ñ€Hˆgð
 #×3Ñ3ØØ%Ø#ð 4ó Ñ€K�ð
 ×ÒÜ˜ =Ñ0°+Ô>Ü˜ -Ñ/°Õ<ä˜ =²°D°Ñ#9Ñ9¸;ÔGÜ˜ -²°4°Ñ"8Ñ8¸*ÕEr<   c                 óÌ  — t        | dddd¬«      \  }}|j                  dk(  rÂ|dd…df   }t        | j                  ||¬«      | j                  ||¬«      «       t        | j	                  ||¬«      | j	                  ||¬«      «       t        | j                  ||¬«      | j                  ||¬«      «       t        | j                  ||¬«      | j                  ||¬«      «       yy)	z5Test that reshaped raw_prediction gives same results.rÍ   rµ   r¶   r¸   r¹   r,   Nrs   )r^   Úndimr   r8   r    rŸ   r¡   )r8   r]   r\   Úraw_prediction_2ds       r:   Útest_graceful_squeezingrþ   ×  sü   € ô :ØØØØØôÑ€FˆNð ×Ñ˜aÒØ*ª1¨d¨7Ñ3ÐÜØ�I‰I˜VÐ4EˆIÓFØ�I‰I˜V°NˆIÓCô	
ô 	Ø×Ñ fÐ=NÐÓOØ×Ñ f¸^ÐÓLô	
ô 	Ø�M‰M Ð8IˆMÓJØ�M‰M ¸ˆMÓGô	
ô 	Ø×!Ñ!¨Ð@QÐ!ÓRØ×!Ñ!¨ÀÐ!ÓOõ	
ð  r<   c                 óÜ  — | j                   sÈt        j                  g d¢«      }t        | j                  t
        «      r{d}| j                  j                  }| j                  j                  s||z   }| j                  j                  }| j                  j                  s||z
  }t        j                  |||«      }| j                  j                  |«      }nªt        j                  | j                  «      j                  t         «      }t        j"                  | j                  | j                  ft        j$                  d«       t         ¬«      }t        j$                  d«      |j&                  dd| j                  dz   …<   |dk(  r2t        j(                  d|j*                  d   |j*                  d   ¬	«      }| j-                  |||¬
«      }| j/                  ||¬«      }t1        || dd¬«       y)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ˆ   r2   rN   r   rO   r>   rU   r?   rV   ÚclipÚinverserK   rH   rL   rM   ÚfullÚexprJ   ru   rx   r8   rÆ   r   )	r8   r¯   r\   rf   r>   r?   r]   Ú
loss_valueÚconstant_terms	            r:   Útest_loss_of_perfect_predictionr	  ö  s“  € ð ×ÒäŸ™Ò"<Ó=ˆä�d—i‘i¤Ô.ØˆCØ×&Ñ&×*Ñ*ˆCØ×'Ñ'×5Ò5Ø˜C‘i�Ø×'Ñ'×,Ñ,ˆDØ×'Ñ'×6Ò6Ø˜c‘z�ÜŸW™W ^°S¸$Ó?ˆNØ—‘×"Ñ" >Ó2‰ô —‘˜4Ÿ>™>Ó*×1Ñ1´%Ó8ˆô Ÿ™Ø—>‘> 4§>¡>Ð2ÜŸ™˜r›
�{Üô
ˆô
 68·V±V¸B³Zˆ×ÑÑ1˜tŸ~™~°Ñ1Ð1Ñ2à˜ÒÜŸ™ A v§|¡|°A¡¸F¿L¹LÈ¹OÔLˆà—‘ØØ%Ø#ð ó €Jð
 ×1Ñ1Ø ]ð 2ó €Mô
 �J  °UÀÖGr<   c                 ó"  ‡ ‡‡
‡‡— d}t        ‰ |dd|¬«      \  ŠŠ‰dk(  r2t        j                  d‰j                  d   ‰j                  d   ¬«      Š‰ j	                  ‰‰‰¬	«      \  }}|j                  ‰j                  k(  sJ ‚|j                  ‰j                  k(  sJ ‚‰ j
                  sVˆ ˆˆfd
„}t        |‰d¬«      }t        ||dd¬«       ˆ ˆˆfd„}t        |‰d¬«      }	‰ j                  ryt        ||	dd¬«       yt        ‰ j                  «      D ]w  Š
ˆ
ˆ ˆˆˆfd„}t        |‰dd…‰
f   d¬«      }t        |dd…‰
f   |dd¬«       ˆ
ˆ ˆˆˆfd„}t        |‰dd…‰
f   d¬«      }	‰ j                  rŒbt        |dd…‰
f   |	dd¬«       Œy y)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Í   rµ   rñ   r¹   rË   r,   r   ro   r¿   c                 ó,   •— ‰j                  ‰| ‰¬«      S ©Nr¿   ©r8   ©re   r8   r¯   r]   s    €€€r:   Ú	loss_funcz6test_gradients_hessians_numerically.<locals>.loss_funcG  s"   ø€ Ø—9‘9ØØ Ø+ð ó ð r<   ç�íµ ÷Æ°>)rf   çñhãˆµøÔ>r   ©rÞ   r  c                 ó,   •— ‰j                  ‰| ‰¬«      S r  ©rŸ   r  s    €€€r:   Ú	grad_funcz6test_gradients_hessians_numerically.<locals>.grad_funcQ  s"   ø€ Ø—=‘=ØØ Ø+ð !ó ð r<   c                 ó^   •— ‰j                  «       }| |d d …‰f<   ‰j                  ‰|‰¬«      S r  )Úcopyr8   ©re   ÚrawÚkr8   r\   r¯   r]   s     €€€€€r:   r  z6test_gradients_hessians_numerically.<locals>.loss_funcf  s=   ø€ Ø$×)Ñ)Ó+�Ø�’A�q�D‘	Ø—y‘yØ!Ø#&Ø"/ð !ó ð r<   Nçñhãˆµøä>c                 ól   •— ‰j                  «       }| |d d …‰f<   ‰j                  ‰|‰¬«      d d …‰f   S r  )r  rŸ   r  s     €€€€€r:   r  z6test_gradients_hessians_numerically.<locals>.grad_funcr  sK   ø€ Ø$×)Ñ)Ó+�Ø�’A�q�D‘	Ø—}‘}Ø!Ø#&Ø"/ð %ó ò �Q�$ñ	ð r<   )r^   rC   ru   rx   r¡   rF   rl   r   Úapprox_hessianrË   rH   )r8   r¯   rá   rW   rÈ   rg   r  Ú	g_numericr  Ú	h_numericr  r\   r]   s   ``        @@@r:   Ú#test_gradients_hessians_numericallyr   (  sŸ  ü€ ð €IÜ9ØØØØØôÑ€FˆNð ˜ÒÜŸ™ A v§|¡|°A¡¸F¿L¹LÈ¹OÔLˆà× Ñ ØØ%Ø#ð !ó �D€A€qð �7‰7�n×*Ñ*Ò*Ð*Ð*Ø�7‰7�n×*Ñ*Ò*Ð*Ð*à×Òö	ô )¨°NÈÔMˆ	Ü˜˜9¨4°eÕ<ö	ô )¨°NÈÔMˆ	Ø×Òàä˜A˜y¨t¸%Ö@ô �t—~‘~Ó&ò 	KˆA÷ð ô -¨Y¸ÂqÈ!ÀtÑ8LÐRVÔWˆIÜ˜Aša ˜d™G Y°TÀÕF÷ð ô -¨Y¸ÂqÈ!ÀtÑ8LÐRVÔWˆIØ×"Ò"àä ¢! Q $¡¨¸ÀEÖJñ9	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
¬«      }‰j                  «       Š|j                  «       }t        ‰ j                  j                  |«      ‰«       t         ||«      dd¬«       t        ‰ j                  ‰|¬«      dd¬«       y)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                 óP   •— ‰j                  ‰| ¬«      ‰j                  ‰¬«      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]   )r8   rÆ   ©re   r8   r]   s    €€r:   rd   ztest_derivatives.<locals>.func¡  s6   ø€ ð �y‰yØ¨!ð ó 
à×)Ñ)°Ð)Ó8ñ9ð 	9r<   c                 ó*   •— ‰j                  ‰| ¬«      S )Nrs   r  r*  s    €€r:   Úfprimez test_derivatives.<locals>.fprime«  s   ø€ Ø�}‰} F¸1ˆ}Ó=Ð=r<   c                 ó0   •— ‰j                  ‰| ¬«      d   S )Nrs   r,   )r¡   r*  s    €€r:   Úfprime2z!test_derivatives.<locals>.fprime2®  s   ø€ Ø×$Ñ$¨FÀ1Ð$ÓEÀaÑHÐHr<   r   gH¯¼šò×j>)Úx0r,  r.  ÚmaxiterÚtolr   r  ©r  rs   g�íµ ÷Æ >)r   rC   rˆ   ró   Úndarrayr	   Úravelr   rN   r  rŸ   )r8   r/  r]   rd   r,  r.  Úoptimums   ` `    r:   Útest_derivativesr6  ƒ  s  ù€ ô4 �4‰= tÔ,€DÜ�X‰X�v�h¤b§j¡jÔ1€FÜ	�‰�2�$œbŸj™jÔ	)€Bð9”—
‘
ð 9œrŸz™zö 9ð>”"—*‘*ð >¤§¡ö >ðI”2—:‘:ð I¤"§*¡*ö Iô ØØØØØØô€Gð �\‰\‹^€FØ�m‰m‹o€GÜ�D—I‘I×%Ñ% gÓ.°Ô7Ü‘D˜“M 1¨5Õ1Ü�D—M‘M¨À�MÓHÈ!ÐRVÖWr<   c                 óÄ  ‡ ‡‡‡— dŠ‰ j                   s2‰ j                  j                  t        j                  dd‰¬«      «      ŠnGt        j
                  ‰«      j                  t        j                  «      ‰ j                  z  Šd‰ddd…<   ‰dk(  rt        j                  d	d
‰¬«      Š‰ j                  ‰‰¬«      }ˆ ˆˆˆfd„}‰ j                   s°t        |dddi¬«      }‰ j                  ‰t        j                  ‰|«      ‰¬«      }|j                  t        «       k(  sJ ‚|j                  ‰j                  k(  sJ ‚t!        |«       |t#        |j$                  d¬«      k(   |j'                  «       t#        dd¬«      k(   yt)        |t        j*                  ‰ j                  «      dddidt-        t        j.                  d‰ j                  f«      dd«      ¬«      }‰ j                  ‰t        j0                  |‰df«      ‰¬«      }|j                  ‰j                  k(  sJ ‚t!        |«       t3        ||j$                  dd¬«       t3        |j'                  d¬«      dd¬«       y)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                  ‰| ¬«      }n6t        j                  t        j                  | ‰‰j
                  f¬«      «      } ‰‰|‰¬«      S )N)rx   r`   ©rx   r¿   )rF   rC   r  ÚascontiguousarrayÚbroadcast_torH   )re   r\   r8   rW   r¯   r]   s     €€€€r:   Úfunz%test_loss_intercept_only.<locals>.fun×  s[   ø€ Ø×!Ò!ÜŸW™W¨IÀ1ÔE‰Nä×1Ñ1Ü—‘ ¨)°T·^±^Ð)DÔEóˆNñ ØØ)Ø'ô
ð 	
r<   gH¯¼šò×z>r0  r   )r1  Úoptionsr¿   ©r�   çê-�™—q=)rž   g‚vIhÂ%<=ÚSLSQPr,   )r1  r?  ÚmethodÚconstraintsr  r  rÛ   r2  )rF   rN   r  rC   ru   rK   rL   ró   rH   rÅ   r   rŸ   rc   rx   Útupler»   r   r   re   rà   r   Úzerosr   rï   rt   r   )r8   r¯   Úar>  ÚoptÚgradrW   r]   s   ``    @@r:   Útest_loss_intercept_onlyrJ  Ã  sý  û€ ð €IØ×ÒØ—‘×"Ñ"¤2§;¡;¨r°1¸)Ô#DÓE‰ä—‘˜9Ó%×,Ñ,¬R¯Z©ZÓ8¸4¿>¹>ÑIˆØˆ‰s�ˆs‰à˜ÒÜŸ™ C¨°	Ô:ˆà×Ñ v¸]ÐÓK€A÷
ð ×ÒÜ˜c t°iÀÐ5EÔFˆØ�}‰}ØÜŸ<™<¨°Ó2Ø'ð ó 
ˆð
 �w‰wœ%›'Ò!Ð!Ð!Ø�w‰w˜&Ÿ,™,Ò&Ð&Ð&Ü˜!ÔØ	ŒV�C—E‘E˜tÔ$Ò$Ø�‰‹
”f˜Q EÔ*Ó*ô ØÜ�H‰H�d—n‘nÓ&ØØ Ð$ØÜ(¬¯©°!°T·^±^Ð1DÓ)EÀqÈ!ÓLô
ˆð �}‰}ØÜŸ7™7 1 y°! nÓ5Ø'ð ó 
ˆð
 �w‰w˜&Ÿ,™,Ò&Ð&Ð&Ü˜!ÔÜ˜˜3Ÿ5™5 t°%Õ8Ü˜Ÿ™ a˜Ó(¨!°%Ö8r<   zloss, func, random_distrô   c                 ó0   — t        j                  | d¬«      S )Né   )Úq)rC   Ú
percentile)re   s    r:   ú<lambda>rO    s   € ¬r¯}©}¸QÀ"Ô/E€ r<   ÚpoissonÚexponentialÚbinomialc                 ó^  — t         j                  j                  |«      }|dk(  r|j                  ddd¬«      }n t	        ||«      d¬«      }| j                  |¬«      }t        |«       |t        | j                  j                   ||«      «      «      k(  sJ ‚| j                  j                  |«      t         ||«      «      k(  sJ ‚t        | t        «      r%t        | j                  j                  |«      |«       | j                  j                  rB|j                  | j                  j                   «       | j                  |¬«      }t        |«       | j                  j"                  rC|j                  | j                  j$                  «       | j                  |¬«      }t        |«       yy)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.
    rR  r,   rr   r   rA   r)  N)rC   rD   rE   rR  ÚgetattrrÅ   r   r   rN   r  r2   r   r   rR   rU   Úfillr>   rV   r?   )r8   rd   Úrandom_distrá   r[   Úy_trainÚbaseline_predictions          r:   Ú test_specific_fit_intercept_onlyrY    sf  € ô$ �)‰)×
Ñ
Ð 2Ó
3€CØ�jÒ Ø—,‘,˜q #¨C�,Ó0‰à+”'˜#˜{Ó+°Ô5ˆØ×1Ñ1¸Ð1ÓAÐô Ð)Ô*Ø¤&¨¯©¯©¹¸W»Ó)FÓ"GÒGÐGÐGØ�9‰9×ÑÐ0Ó1´V¹DÀ»MÓ5JÒJÐJÐJÜ�$œÔ%Ü˜Ÿ	™	×)Ñ)Ð*=Ó>Ð@SÔTð ×Ñ×)Ò)Ø�‰�T×)Ñ)×-Ñ-Ô.Ø"×5Ñ5¸WÐ5ÓEÐÜÐ-Ô.Ø×Ñ×*Ò*Ø�‰�T×)Ñ)×.Ñ.Ô/Ø"×5Ñ5¸WÐ5ÓEÐÜÐ-Õ.ð +r<   c            	      ó¢  — t         j                  j                  d«      } d}t        |¬«      }| j	                  d|dz   d¬«      j                  t         j                  «      }|j                  |¬«      }|j                  |fk(  sJ ‚t        j                  ||j                  ¬«      }t        |«      D ]  }||k(  j                  «       ||<   Œ t        |t        j                  |«      t        j                  t        j                  |«      «      z
  «       t        |d	d	d	…f   |j                  j                  |d	d	d	…f   «      «       t        j                  d
¬«      t        j                   d
¬«      fD ]Y  }|j                  t         j                  «      }|j                  |¬«      }|j                  |j                  k(  sJ ‚t#        |«       Œ[ y	)zATest that fit_intercept_only returns the mean functional for CCE.r   r’   r–   r,   r   rA   r)  rº   Nrq   r;  )rC   rD   rE   r   ÚrandintrL   ró   rÅ   rx   rF  r»   rË   Úmeanr   ÚlogrN   rï   r   )r[   rH   r8   rW  rX  rÉ   r  s          r:   Ú(test_multinomial_loss_fit_intercept_onlyr^  1  su  € ä
�)‰)×
Ñ
 Ó
"€CØ€IÜ¨Ô3€Dð �k‰k˜!˜Y¨™]°ˆkÓ5×<Ñ<¼R¿Z¹ZÓH€GØ×1Ñ1¸Ð1ÓAÐØ×$Ñ$¨¨Ò4Ð4Ð4Ü
�‰� '§-¡-Ô0€AÜ�9Óò %ˆØ˜1‘×"Ñ"Ó$ˆˆ!Šð%äÐ'¬¯©°«´R·W±W¼R¿V¹VÀA»YÓ5GÑ)GÔHÜÐ'¨ªa¨Ñ0°$·)±)·.±.ÀÀ4ÊÀ7ÁÓ2LÔMä—H‘H 2Ô&¬¯©°bÔ(9Ð:ò /ˆØ—.‘.¤§¡Ó,ˆØ"×5Ñ5¸WÐ5ÓEÐØ"×(Ñ(¨G¯M©MÒ9Ð9Ð9ÜÐ-Õ.ñ	/r<   c                 óò   — d}d}t        |¬«      }t        ||| ¬«      \  }}t        j                  dd|¬«      }|j                  j                  |||¬«      }|j                  |||¬«      }t        ||«       y	)
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`.
    r   r´   r–   ©r8   rW   rZ   r~   r-   ro   r¿   N)r   r^   rC   ru   r1   Ú_test_cy_gradientrŸ   r   )	rá   rW   rH   r8   r]   r\   r¯   r¦   r¨   s	            r:   Útest_multinomial_cy_gradientrb  H  s�   € ð €IØ€IÜ¨Ô3€DÜ9ØØØôÑ€FˆNô
 —K‘K  Q¨IÔ6€Mà�J‰J×(Ñ(ØØ%Ø#ð )ó €Eð
 �M‰MØØ%Ø#ð ó €Eô
 �E˜5Õ!r<   c                 ó²  — t         j                  j                  | «      }d}t        «       }t	        d¬«      }|j                  dd|¬«      j                  t         j                  «      }|j                  |¬«      }t        j                  |df«      }d|z  |dd…df<   d|z  |dd…d	f<   t        |j                  ||¬
«      |j                  ||¬
«      «       y)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   r[  rL   ró   rô   rG   r   r8   )rá   r[   rW   ÚbinomÚmultinomrW  r\   Úraw_multinoms           r:   Ú"test_binomial_and_multinomial_lossrg  f  sÁ   € ä
�)‰)×
Ñ
Ð 2Ó
3€CØ€IÜÓ€EÜ"¨QÔ/€HØ�k‰k˜!˜Q YˆkÓ/×6Ñ6´r·z±zÓB€GØ—Z‘Z Y�ZÓ/€NÜ—8‘8˜Y¨˜NÓ+€LØ Ñ.€L’�A�ÑØ˜~Ñ-€L’�A�ÑÜØ�
‰
˜'°.ˆ
ÓAØ�‰˜W°\ˆÓBõr<   r]   )r…   r   r   )r†   r,   r,   r{   )g      Àrò   rò   )r.   rB   rB   c                 óÔ   — d„ }d„ }t        «       }| j                  |«      } |j                  |«      }| |f} ||Ž t         ||Ž «      k(  sJ ‚t         |j                  |Ž  ||Ž «       y)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   r\  r]  r  ©r‹   Úraw_predÚzs      r:   Úalt_lossz:test_binomial_vs_alternative_formulation.<locals>.alt_lossˆ  s;   € Ø�‰E�A‰IˆÜ�w‰w”r—v‘v˜a¤"§&¡&¨!¨¨h©Ó"7Ñ7Ó8Ó9Ð9r<   c                 óP   — d| z  dz
  }| dt        j                  ||z  «      z   z  S rj  )rC   r  rk  s      r:   Úalt_gradientz>test_binomial_vs_alternative_formulation.<locals>.alt_gradientŒ  s.   € à�‰E�A‰IˆØˆr�QœŸ™  H¡Ó-Ñ-Ñ.Ð.r<   N)r   rL   r   r   rŸ   )r]   r{   Úglobal_dtypern  rp  Úbin_lossÚdatums          r:   Ú(test_binomial_vs_alternative_formulationrt  w  sv   € ò":ò/ô
  Ó!€Hà�]‰]˜<Ó(€FØ�]‰]˜<Ó(€FØ�VÐ€Eá�UÐœv¡h°Ð&6Ó7Ò7Ð7Ð7ÜÐ%�H×%Ñ% uÐ-©|¸UÐ/CÕDr<   c           
      óÂ  — d}t        | |dd|¬«      \  }}t        | d«      rU| j                  |«      }|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 ]�  \  }}| j                  ||d||¬«      \  }}|j                  || j                  fk(  sJ ‚t        j                  |d¬«      t        dd¬	«      k(  sJ ‚t        || j                  ||dd¬«      «       Œƒ yy)z<Test that predict_proba and gradient_proba work as expected.rÍ   rµ   rñ   r¹   rÁ   r,   rÛ   rÝ   r@  rÂ   )NNNrÚ   rÏ   )r^   r5   rÁ   rx   rH   rC   rà   r   rÄ   rÂ   r   rŸ   )r8   rá   rW   r]   r\   rí   rI  s          r:   Útest_predict_probarv  ›  sq  € ð €IÜ9ØØØØØôÑ€FˆNô ˆt�_Ô%Ø×"Ñ" >Ó2ˆØ�{‰{˜y¨$¯.©.Ð9Ò9Ð9Ð9Ü�v‰v�e !Ô$¬¨q°eÔ(<Ò<Ð<Ð<äˆtÐ%Ô&àØ”2—=‘= Ó0Ð1Ü�]‰]˜>Ó*¨DÐ1Ü�]‰]˜>Ó*¬B¯M©M¸.Ó,IÐJð	
ò 	‰KˆD�%ð ×-Ñ-ØØ-Ø"Ø!Øð .ó ‰KˆD�%ð —;‘; 9¨d¯n©nÐ"=Ò=Ð=Ð=Ü—6‘6˜% aÔ(¬F°1¸%Ô,@Ò@Ð@Ð@ÜØØ—‘Ø!Ø#1Ø"&Ø!%ð	 ó õñ	ð 'r<   r»   Úorder)ÚCÚFc                 ó¾  — d}|dk(  rt        j                  |«      } | |¬«      } | j                  |||¬«      \  }}| j                  r#|j                  |fk(  sJ ‚|j                  dk(  slJ ‚| j
                  r:|j                  || j                  fk(  sJ ‚|j                  || j                  fk(  s&J ‚|j                  |fk(  sJ ‚|j                  |fk(  sJ ‚|j                  |k(  sJ ‚|j                  |k(  sJ ‚|dk(  r1|j                  j                  sJ ‚|j                  j                  sJ ‚y|j                  j                  sJ ‚|j                  j                  sJ ‚y)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»   rw  )r,   rx  N)rC   rï   Úinit_gradient_and_hessianÚconstant_hessianrx   rF   rH   r»   ÚflagsÚc_contiguousÚf_contiguous)r8   r¯   r»   rw  rW   rŸ   rø   s          r:   Útest_init_gradient_and_hessiansr€  Ç  s[  € ð €IØ˜ÒÜŸ™ 	Ó*ˆÙ˜mÔ,€DØ×6Ñ6ØØØð 7ó Ñ€Hˆgð
 ×ÒØ�~‰~ ) Ò-Ð-Ð-Ø�}‰} Ò$Ð$Ð$Ø	×	Ò	Ø�~‰~ )¨T¯^©^Ð!<Ò<Ð<Ð<Ø�}‰} ¨D¯N©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«       y# 1 sw Y   yxY w)zDTest that init_gradient_and_hessian raises errors for invalid input.©ÚmatchrW   r´   N© )ÚpytestÚraisesÚ
ValueErrorÚ	TypeErrorr{  )r8   ÚparamsÚerr_msgrŸ   rø   s        r:   Ú%test_init_gradient_and_hessian_raisesr‹  ï  sV   € ñ ‹6€DÜ	�‰œ
¤IÐ.°gÔ	>ñ RØ:˜D×:Ñ:ÑQÀQÐQÈ&ÑQÑˆ�'÷R÷ Rñ Rús   ©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                 ól   — t        j                  ||¬«      5   | di |¤Ž ddd«       y# 1 sw Y   yxY w)z/Test that loss raises errors for invalid input.r‚  Nr„  )r…  r†  )r8   r‰  Úerr_typerŠ  s       r:   Ú#test_loss_init_parameter_validationrŽ     s1   € ôB 
�‰�x wÔ	/ñ Ù‰ˆvŠ÷÷ ñ ús   ˜	*ª3c                 óÂ   — d}t        | |ddd¬«      \  }}t        j                  | «      }t        j                  |«      } | ||¬«      t	         |||¬«      «      k(  sJ ‚y)z Test that losses can be pickled.rÍ   rµ   rñ   r¸   r¹   rs   N)r^   ÚpickleÚdumpsÚloadsr   )r8   rW   r]   r\   Úpickled_lossÚunpickled_losss         r:   Útest_loss_pickler•  %  sp   € ð €IÜ9ØØØØØôÑ€FˆNô —<‘< Ó%€LÜ—\‘\ ,Ó/€NÙ�v¨nÔ=ÄÙ˜f°^ÔDóBò ð ñ r<   rÉ   )r)   r   r,   r‚   r-   rB   c                 óâ  — t        | ¬«      }t        | ¬«      }d}t        ||d¬«      \  }}|j                  j	                  |«      }|j                  ||¬«      |j                  |«      z   }|j                  ||¬«      |j                  |«      z   }t        ||«       |j                  ||¬«      \  }	}
|j                  ||¬«      \  }}t        |	||z  «       t        |
||z  |dz  |z  z   «       y)zCTest for identical losses when only the link function is different.r*   rq   r¸   r`  rs   r-   N)	r   r   r^   rN   r  r8   rÆ   r   r¡   )rÉ   Ú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Ÿ  7  s2  € ô '¨QÔ/ÐÜ3¸!Ô<ÐØ€IÜ9Ø¨¸ôÑ€FˆNð ×"Ñ"×*Ñ*¨>Ó:€Fð  ×$Ñ$Ø nð %ó à×1Ñ1°&Ó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Ÿ   r8   r    Úuse_sample_weightz"namespace, device_name, dtype_namec           
      ód  — d„ }t        |||«      \  }}	t        |«      }
|dk(  rdnd}d}d} | ||	¬«      } |«       }t        ||dd	|¬
«      \  }}|j                  |«      }|j                  |«      }|j	                  ||	¬«      }|j	                  ||	¬«      }|rft
        j                  j                  |«      }|j                  dd|¬«      j                  dd «      j                  |«      }|j	                  ||	¬«      }nd }d }t        ||«      }t        ||«      } ||||¬«      }t        d¬«      5   ||||¬«      }|dk(  rt        j                  ||«      sCJ ‚t        |t        «      r#t        ||«      D ]  \  }} |||||||
¬«       Œ n |||||||
¬«       d d d «       y # 1 sw Y   y xY w)Nc                 óª   — t        t        | t        d¬«      |||¬«       | j                  |j                  k(  sJ ‚t	        | «      t	        |«      k(  sJ ‚y )NÚcpu©Úxpr$   r  )r   r!   rC   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~  sT   € ô 	Ü�I¤"¨UÔ3°YÀTÐPTõ	
ð �‰Ð"3×"9Ñ"9Ò9Ð9Ð9Ü 	Ó*Ô.>Ð?PÓ.QÒQÐQÑQr<   Úfloat32r  rÝ   r¸   r   r¦  rµ   )iÎÿÿÿr8  r¹   r#   r„   r´   rA   r   r¿   T)Úarray_api_dispatchr¡  r©  )r%   r    r^   rL   ÚasarrayrC   rD   rE   rI   r  rT  r   Úiscloser2   rE  Úzip)Úarray_api_loss_classÚ
loss_classr   r¢  Ú	namespaceÚdevice_nameÚ
dtype_namer­  r§  r$   r  rÞ   Úrandom_seedrW   Úarray_api_loss_instanceÚloss_instancer]   r\   Ú	y_true_xpr¬  r[   Úsample_weight_npÚsample_weight_xprC  Úarray_api_methodr«  rª  Úres_xpÚres_nps                                r:   Útest_loss_array_apirÁ  d  só  € ò4Rô & i°¸jÓI�J€BˆÜ˜*Ó%€DØ Ò*‰4°€DØ€KØ€IÙ2°bÀÔHÐÙ“L€MÜ9ØØØØØôÑ€FˆNð �]‰]˜:Ó&€FØ#×*Ñ*¨:Ó6€NØ—
‘
˜6¨&�
Ó1€IØŸ
™
 >¸&˜
ÓAÐÙÜ�i‰i×#Ñ# KÓ0ˆà�K‰K˜˜A IˆKÓ.×3Ñ3°A°tÓ<×CÑCÀJÓOð 	ð Ÿ:™:Ð&6¸v˜:ÓFÑàÐØÐä�] KÓ0€FÜÐ6¸ÓDÐÙØ nÐDTô€Iô 
¨4Ô	0ñ Ù$ØØ,Ø*ô
ˆ	ð ˜:Ò%ä—:‘:˜i¨Ô3Ð3Ð3ä˜)¤UÔ+Ü&)¨)°YÓ&?ò ‘N�F˜FÙ,Ø"(Ø"(Ø*;ØØ!Ø!öññ )Ø'Ø'Ø&7ØØØõ÷-÷ ñ ús   Ä3A*F&Æ&F/c           	      ó*  — t        j                  d«      }d|j                  _        t	        j
                  ddd«      }t        | ||«      \  }}|D ]Á  }|dk(  r|j                  ||j                  |¬«      }n|j                  ||j                  |¬«      }t        t        ||j                  |«      |¬«      «      }	t        |j                  d	|j                  |«      z   «      «      }
|
d
kD  sJ ‚|	t        j                  |
|dk(  rdndd
¬«      k(  rŒÁJ ‚ y )NÚmpmathr   iØÿÿÿé(   i,  r®  )r»   r$   )r\   Úraw_prediction_expr§  r,   r   r  rA  rœ   )r…  ÚimportorskipÚmpÚprecrC   ru   r%   r°  r®  ró   rM   r   r  r]  r   )rµ  r¶  r·  rÃ  Úvalues_to_testr§  r$   Úvaluere   rª  Úresult_mpmaths              r:   Útest_log1pexprÌ  È  s  € ô
 × Ñ  Ó*€FØ€F‡I�I„NÜ—[‘[  b¨#Ó.€NÜ% i°¸jÓI�J€BˆØò 
ˆØ˜Ò"Ø—
‘
˜5¨¯
©
¸6�
ÓB‰Aà—
‘
˜5¨¯
©
¸6�
ÓBˆAäÜØ Ø#%§6¡6¨!£9Øôó
ˆ	ô ˜fŸj™j¨¨V¯Z©Z¸Ó->Ñ)>Ó?Ó@ˆØ˜qÒ Ð Ð àœFŸM™MØØ" iÒ/‘°UØô
ó 
ð 	
ð 
ñ!
r<   c                  ó>  — t        j                  t        t         j                  «      D � �cg c]  \  } }| j	                  d«      r|‘Œ }} }t        |«      dkD  sJ d«       ‚|D ]2  }|j                  dk(  rŒJ |j                  › d|j                  ›d�«       ‚ yc c}} w )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.
    ÚCyr   z+No Cy* classes found in sklearn._loss._losszsklearn._loss._lossz.__module__ == z , expected 'sklearn._loss._loss'N)ÚinspectÚ
getmembersÚ_loss_moduleÚisclassÚ
startswithÚlenÚ
__module__r4   )r9   ÚobjÚ
cy_classesÚclss       r:   Útest_cy_loss_classes_modulerÙ  è  s¨   € ô !×+Ñ+¬L¼'¿/¹/ÓJ÷áˆD�#Ø�?‰?˜4Ô ò 	ð€Jñ ô
 ˆz‹?˜QÒÐMÐ MÓMÐØò 
ˆØ�~‰~Ð!6Ó6ð 	
Ø�|‰|ˆn˜O¨C¯N©NÐ+=ð >-ð .ó	
Ð6ñ
ùós   ¬B)rµ   rñ   r¸   )grÏ  r�  ÚnumpyrC   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;   r^   rl   ÚmarkÚparametrizer|   ÚinfÚY_COMMON_PARAMSÚY_TRUE_PARAMSÚY_PRED_PARAMSrŒ   r‘   r]  Úlog1pr«   r®  ró   rÊ   rØ   rî   rú   rþ   r	  r   r6  rJ  r\  ÚmedianrY  r^  rb  rg  rˆ   rt  rv  r€  Úint64r‹  rˆ  r‡  rŽ  r•  rŸ  rÁ  rÌ  rÙ  r  s   0r:   ú<module>rò     s  ðÛ Û ã Û ß =Ý ÷ó õ $å "Ý /ß @÷÷ ÷ ÷ ó õ$ ,÷ñ õ
÷ñ ñ �.�'—.‘.Ó"Ó#€
à%/Ö0˜T‘$•&Ò0€à Ù˜ÔÙ�tÔÙ˜$ÔÙ˜!ÔÙ˜!ÔÙ˜!ÔÙ˜#ÔÙ !Ô$Ù !Ô$Ù !Ô$Ù #Ô&ðñ €òð  CEó""òJUð ‡�×Ñ˜ Ð5GÐÓHñ <ó Ið <ñL ÓÒ,°·±¨w¸¿¹Ð.?Ð@Ùƒ_Ò)¨R¯V©V¨G°R·V±VÐ+<Ð=Ùƒ]Ò'¨2¯6©6¨'°2·6±6Ð):Ð;Ùƒ[Ò%¨¯©¨°·±Ð'8Ð9ÙÓ˜˜c˜
 b§f¡f W¨b°$¸¿¹Ð$?Ð@Ùƒ_�s˜C�j B§F¡F 7¨B°°a¸¿¹Ð"@ÐAÙ˜2Ô  c 
¨b¯f©f¨W°b·f±fÐ,=Ð>Ù˜1Ô  S˜z¨R¯V©V¨G°R·V±VÐ+<Ð=Ù˜3Ô # s ¨r¯v©v¨g°r¸4ÀÇÁÐ-HÐIÙ˜1Ô  S˜z¨R¯V©V¨G°R¸¸qÀ"Ç&Á&Ð+IÐJÙ˜1Ô  S˜z¨R¯V©V¨G°R¸¸qÀ"Ç&Á&Ð+IÐJÙ 2Ô&¨¨c¨
°b·f±f°W¸b¿f¹fÐ4EÐFÙ 1Ô%Ò'>À"Ç&Á&ÀÈ"Ï&É&Ð@QÐRÙ 3Ô'¨#¨s¨°r·v±v°g¸rÀ4ÈÏÉÐ5PÐQÙ 1Ô%¨¨S z°R·V±V°G¸RÀÀqÈ"Ï&É&Ð3QÐRÙ 1Ô%¨¨S z°R·V±V°G¸RÀÀqÈ"Ï&É&Ð3QÐRÙÓš¨B¯F©F¨7°B¸¸2¿6¹6Ð*BÐCÙÓ˜B "§&¡& ¨"¨c°2·6±6Ð :Ð;ð'€ñ2 Ó˜˜˜RÐ Ùƒ[�1�#�rÐÙ˜2Ô¢°Ð4Ù˜1Ô  a˜y¨"Ð-Ù˜3Ô !  bÐ)Ù 2Ô&ª¸Ð<Ù 1Ô%¨¨a y°"Ð5Ù 3Ô'¨!¨¨bÐ1ÙÓ˜!˜Q˜ Ð$ÙÓšM¨2Ð.ð€ñ Ó˜˜Q˜CÐ Ù˜2Ô ¢MÐ2Ù˜1Ô˜r¢=Ð1Ù˜3Ô  a SÐ)Ù 2Ô&¨ªMÐ:Ù 1Ô%¢}°bÐ9Ù 3Ô'¨¨a¨SÐ1ÙÓ˜˜a ˜VÐ$ÙÓ˜S #˜J¨¨A¨Ð/ð€ð ‡�×ÑØ'Ø�mÑ#óñ7ó	ð7ð ‡�×ÑØ'Ø�mÑ#óñ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±F¸1³I±Ñ,=¸uÀaÐHðsñ 
‹˜#˜v˜rŸv™v a›y¨&¨"¯&©&°«)°eÑ*;¸YÈÐNðsñ 
˜qÔ	! 3¨¨¯©¨q«	Ð3DÀdÈDÐQðsñ 
! qÔ	)¨3°°Q¸¸V¸R¿V¹VÀA»Y¹Ñ5FÈÈdÐSðsñ 
! qÔ	)¨3°°V°R·V±V¸A³YÀÑ5FÈÈdÐSðsñ $¨!Ô,ØØØ)ØØð	
ðsñ, ÓØØˆB�F‰F�1‹IØˆB�H‰H�Q‹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ðsñ@ 
Ó	˜S %¨¨yÐ:OÐPðAsñB 
Ó	˜S %ÐFÐ+@Ð*AÀAÑ*EÑFðCsñD 
Ó	˜S $¨¨IÐ7LÐMðEsñF 
Ó	˜S $ÐEÐ*?Ð)@À1Ñ)DÑ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Ó&¨Ñ,ØØð	
ðgsñx  ¨!Ô,ØÚÙ’oÓ&¨Ñ,ØØð	
ðwsñH  ¨!Ô,ØÚÙ’oÓ&¨Ñ,ØØð	
ðGsñX  ¨!Ô,ØÚÙ’nÓ%¨Ñ.ØØð	
ðWsðh 	ðm ó wñpBóqwðpBð6 ‡�×Ñ˜ Ó,Ø‡�×ÑÐ*¨U°D¨MÓ:Ø‡�×Ñ˜ b§j¡j°"·*±*Ð%=Ó>Ø‡�×Ñ˜ r§z¡z°2·:±:Ð&>Ó?Ø‡�×Ñ˜¨4°¨)Ó4Ø‡�×Ñ˜ $¨ Ó+Ø‡�×Ñ˜ $¨ Ó+Ø‡�×Ñ˜ q¨! fÓ-ñY7ó .ó ,ó ,ó 5ó @ó ?ó ;ó -ðY7ðx ‡�×Ñ˜ Ð5GÐÓHØ‡�×Ñ˜¨4°¨/Ó:ñK$ó ;ó IðK$ð\ ‡�×Ñ˜ Ð5GÐÓHØ‡�×Ñ˜¨4°¨/Ó:ñL>ó ;ó IðL>ð^ ‡�×Ñ˜ Ð5GÐÓHØ‡�×Ñ˜¨6°8Ð*<Ó=ñBFó >ó IðBFðJ ‡�×Ñ˜ Ð5GÐÓHñ
ó Ið
ð< ‡�×Ñ˜ Ð5GÐÓHØ‡�×Ñ˜¨4°¨/Ó:ñ-Hó ;ó Ið-Hð` ‡�×Ñ˜ Ð5GÐÓHØ‡�×Ñ˜¨4°¨/Ó:ñVKó ;ó IðVKðr ‡�×ÑØòóð" ñ+Xó ó#ð$+Xð\ ‡�×Ñ˜ Ð5GÐÓHØ‡�×Ñ˜¨4°¨/Ó:ñ>9ó ;ó Ið>9ðB ‡�×ÑØá	Ó	˜RŸW™W hÐ/Ù	‹˜"Ÿ)™) XÐ.Ù	˜dÔ	#Ñ%EÀxÐPÙ	Ó	˜BŸG™G YÐ/Ù	‹˜"Ÿ'™' =Ð1Ù	Ó	˜BŸG™G ]Ð3Ù	Ó	˜RŸW™W jÐ1ðóñ/óð/ò>/ò."ò<ð" ‡�×Ñ˜ H B§H¡Hª[Ó$9¸8¸2¿8¹8ÂKÓ;PÐ#QÓRØ‡�×Ñ˜ H B§H¡Hª^Ó$<¸h¸b¿h¹hÂ{Ó>SÐ#TÓUñEó Vó SðEðD ‡�×Ñ˜ Ð5GÐÓHñ(ó Ið(ðV ‡�×Ñ˜ Ó,Ø‡�×Ñ˜¨4°¨/Ó:Ø‡�×Ñ˜ 2§:¡:¨r¯z©zÐ":Ó;Ø‡�×Ñ˜ *Ó-ñ!*ó .ó <ó ;ó -ð!*ðH ‡�×Ñ˜ Ó,Ø‡�×ÑØð �b—h‘hÐØ9¸"¿(¹(¸À9ÐMð	
ðóñRóó -ðRð ‡�×ÑØ%ð Ø˜ÐØØBð		
ð Ø˜ˆOØØ)ð		
ð 
�z 3Ð'¨Ð5TÐUàØ˜ÐØØBð		
ð Ø˜ˆOØØ)ð		
ð 
�Z Ð% zÐ3RÐSð5óñ>ó?ð>ð ‡�×Ñ˜ Ð5GÐÓHñó Iðð" ‡�×Ñ˜Ò5Ó6ñ)ó 7ð)ðX ‡�×ÑØ&à	!Ð#3Ð4Ø	$Ð&9Ð:Ø	  /Ð2ðò
 	Gð ó ð ‡�×ÑØÒDóð ‡�×ÑÐ,¨u°d¨mÓ<Ø‡�×ÑØ(Ù-Ó/óñPó	ó =óóð"Pðf ‡�×ÑØ(Ù-Ó/óñ
ó	ð
ó8
ùòe- 1s   Â${