Ë
    <�DjÔa  ã                   óv	  — d Z ddlZddlZddl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 ddlmZ ddlZddlZddlmZ ddlm
Z ddlmZ ddlZdd	lmZ erd
dlmZ  neZ  ejB                  d«      Z"e"jG                  dd¬«      Z$de%de%de
eejL                  ejL                  f   ddf   fd„Z'de
fd„Z(de
fd„Z)deddfd„Z*e$jV                  deejL                  ejL                  f   fd„«       Z,e$jV                  deejL                  ejL                  f   fd„«       Z-e$jV                  deejL                  ejL                  f   fd„«       Z.e$jV                  deejL                  ejL                  f   fd„«       Z/e$jV                  dee ejL                  f   fd„«       Z0e$jV                  de1deejd                  ejL                  ejL                  ejd                  ejL                  ejL                  ejd                  ejL                  ejL                  f	   fd„«       Z3	 d@ddd œd!e%de%d"e%d#e4d$e4d%e%deeejL                     eejL                     eejL                     f   fd&„Z5eejd                  ejl                  ejn                     ejl                  ejn                     f   Z8e G d'„ d(«      «       Z9 G d)„ d*e«      Z: G d+„ d,«      Z;d-ejl                  ejn                     deejl                  ejl                  ejl                  f   fd.„Z<	 dAd/ejd                  d0ejl                  ejn                     d1ejl                  ejn                     d2e=dejl                  ej|                     f
d3„Z?d4eejd                  ejl                  ejn                     ejl                  ejn                     f   d5ejl                  ej|                     de9fd6„Z@d7e:dee9ee9   f   fd8„ZAd/ejd                  d0ejl                  ejn                     d1ejl                  ejn                     d9ejl                  ejn                     d:ejl                  ej„                     deejd                  ejl                  ejn                     ejl                  ejn                     ejl                  ejn                     f   fd;„ZCd<ed=eejˆ                     d>e1ddfd?„ZEy)BzUtilities for data generation.é    N)Ú	dataclass)ÚTYPE_CHECKINGÚAnyÚCallableÚDictÚ	GeneratorÚListÚ
NamedTupleÚOptionalÚTupleÚTypeÚUnion)Úrequest)Útyping)r   )Úsparse)Úpandas_pyarrow_mapperé   )Ú	DataFrameÚjoblibz
./cachedir)ÚverboseÚ	n_samplesÚ
n_featuresÚreturnc              #   ó†  K  — ddl }t        j                  j                  d«      }|j	                  dd| |z  ¬«      j                  | |«      }t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                   t        j"                  t        j$                  t        j&                  t        j(                  t        j*                  t        j,                  t        j.                  t        j0                  t        j2                  g}|D ]A  }t        j4                  ||¬«      }||f–— |j7                  «       |j7                  «       f–— ŒC |D ]A  }t        j4                  ||¬«      }|j9                  |«      }|j9                  |«      }	||	f–— ŒC |j;                  dd| |z  ¬	«      j                  | |«      }t        j<                  t>        fD ]  }t        j4                  ||¬«      }||f–— Œ! t        j<                  t>        fD ]A  }t        j4                  ||¬«      }|j9                  |«      }|j9                  |«      }	||	f–— ŒC y­w)
z*Enumerate all supported dtypes from numpy.r   NéÊ  é   ©ÚlowÚhighÚsize©Údtypeé   g      à?©r    ) ÚpandasÚnpÚrandomÚRandomStateÚrandintÚreshapeÚint32Úint64ÚbyteÚshortÚintcÚint_ÚlonglongÚuint32Úuint64ÚubyteÚushortÚuintcÚuintÚ	ulonglongÚfloat16Úfloat32Úfloat64ÚhalfÚsingleÚdoubleÚarrayÚtolistr   ÚbinomialÚbool_Úbool)
r   r   ÚpdÚrngÚorigÚdtypesr"   ÚXÚdf_origÚdfs
             úXC:\Crop_Prediction\Backend\crop-ai-system\venv\Lib\site-packages\xgboost/testing/data.pyÚ	np_dtypesrL   '   s  è ø€ ó ä
�)‰)×
Ñ
 Ó
%€Cà�;‰;˜1 3¨Y¸Ñ-Cˆ;ÓD×LÑLØ�:ó€Dô 	�‰Ü
�‰Ü
�‰Ü
�‰Ü
�‰Ü
�‰Ü
�‰Ü
�	‰	Ü
�	‰	Ü
�‰Ü
�	‰	Ü
�‰Ü
�‰Ü
�‰Ü
�
‰
Ü
�
‰
Ü
�
‰
Ü
�‰Ü
�	‰	Ü
�	‰	ð)€Fð, ò (ˆÜ�H‰H�T Ô'ˆØ�AˆgŠØ�k‰k‹m˜QŸX™X›ZÐ'Ó'ð(ð
 ò ˆÜ�H‰H�T Ô'ˆØ—,‘,˜tÓ$ˆØ�\‰\˜!‹_ˆØ�rˆkÓð	ð �<‰<˜˜3 Y°Ñ%;ˆ<Ó<×DÑDØ�:ó€Dô —(‘(œDÐ!ò ˆÜ�H‰H�T Ô'ˆØ�Aˆg‹ðô —(‘(œDÐ!ò ˆÜ�H‰H�T Ô'ˆØ—,‘,˜tÓ$ˆØ�\‰\˜!‹_ˆØ�rˆkÓñ	ùs   ‚J?Kc            	   #   óª  K  — ddl } | j                  «       | j                  «       | j                  «       | j	                  «       | j                  «       | j                  «       | j                  «       | j                  «       g}t        j                  }| j                  dd|dgdd|dgdœt        j                  ¬«      }t        j                  d| j                  fD ]-  }|D ]&  }| j                  dd|dgdd|dgdœ|¬«      }||f–— Œ( Œ/ t        j                  }| j                  «       | j                  «       g}| j                  d	d
|dgdd
|d	gdœt        j                  ¬«      }t        j                  d| j                  fD ]m  }|D ]f  }| j                  d	d
|dgdd
|d	gdœ|¬«      }||f–— |d   }|d   }t!        || j"                  «      sJ ‚t!        || j"                  «      sJ ‚||f–— Œh Œo |j%                  d«      }t        j                  d| j                  fD ]4  }| j                  d	d
|dgdd
|d	gdœ| j'                  «       ¬«      }||f–— Œ6 d| j                  fD ]i  }dd|dgdd|dgdœ}| j                  ||€t        j(                  n| j+                  «       ¬«      }| j                  || j+                  «       ¬«      }||f–— Œk y­w)z/Enumerate all supported pandas extension types.r   Nr#   r   é   é   ©Úf0Úf1r!   ç      ð?g       @g      @rQ   ÚcategoryTF)r%   Ú
UInt8DtypeÚUInt16DtypeÚUInt32DtypeÚUInt64DtypeÚ	Int8DtypeÚ
Int16DtypeÚ
Int32DtypeÚ
Int64Dtyper&   Únanr   r:   ÚNAÚFloat32DtypeÚFloat64DtypeÚ
isinstanceÚSeriesÚastypeÚCategoricalDtyperB   ÚBooleanDtype)	rD   rG   ÚNullrF   r"   rJ   Úser_origÚserÚdatas	            rK   Ú	pd_dtypesrj   b   sê  è ø€ ãð 	�‰‹Ø
�‰ÓØ
�‰ÓØ
�‰ÓØ
�‰‹Ø
�‰‹Ø
�‰‹Ø
�‰‹ð	€Fô %'§F¡F€DØ�<‰<Ø�1�d˜Aˆ q¨!¨T°1 oÑ6¼b¿j¹jð ó €Dô —‘˜˜rŸu™uÐ%ò ˆØò 	ˆEØ—‘Ø˜1˜d A�¨q°!°T¸1¨oÑ>Àeð ó ˆBð ˜�(‹Nñ		ðô �6‰6€DØ�o‰oÓ §¡Ó!2Ð3€FØ�<‰<Ø�S˜$ Ð$¨S°#°t¸SÐ,AÑBÌ"Ï*É*ð ó €Dô —‘˜˜rŸu™uÐ%ò 
 ˆØò 		 ˆEØ—‘Ø˜S $¨Ð,°S¸#¸tÀSÐ4IÑJÐRWð ó ˆBð ˜�(ŠNØ˜D‘zˆHØ�T‘(ˆCÜ˜c 2§9¡9Ô-Ñ-Ü˜h¨¯	©	Ô2Ñ2Ø˜C�-Óñ		 ð
 ð �;‰;�zÓ"€DÜ—‘˜˜rŸu™uÐ%ò ˆØ�\‰\Ø˜˜d CÐ(°°c¸4ÀÐ0EÑFØ×%Ñ%Ó'ð ó 
ˆð �Bˆh‹ðð �r—u‘u�ò ˆØ˜U D¨$Ð/¸¸tÀTÈ4Ð7PÑQˆà�|‰|˜D°D°L¬¯ªÀbÇoÁoÓFWˆ|ÓXˆØ�\‰\˜$ b§o¡oÓ&7ˆ\Ó8ˆØ�Bˆh‹ñùs   ‚KKc            	   #   ó”  K  — ddl } ddl}t        }d| j                  dfD ]¤  }|D ]�  }|j	                  d«      s|j	                  d«      rŒ&| j                  |«      s|dk(  r|nt        j                  }| j                  dd|dgdd|dgd	œt        j                  ¬
«      }| j                  dd|dgdd|dgd	œ|¬
«      }||f–— ŒŸ Œ¦ | j                  dfD ]o  }| j                  dd|dgdd|dgd	œ| j                  «       ¬
«      }| j                  dd|dgdd|dgd	œ| j                  |j                  «       «      ¬
«      }||f–— Œq y­w)z*Pandas DataFrame with pyarrow backed type.r   Nr9   rC   r#   r   rN   rO   rP   r!   FT)r%   Úpyarrowr   r^   Ú
startswithÚisnar&   r]   r   r:   re   Ú
ArrowDtyperB   )rD   ÚparG   rf   r"   Ú	orig_nullrF   rJ   s           rK   Úpd_arrow_dtypesrr   ¡   s�  è ø€ ãÛô #€Fð. �r—u‘u˜aÐ ò ˆØò 	ˆEØ×Ñ 	Ô*¨e×.>Ñ.>¸vÔ.FØà$&§G¡G¨D¤M°d¸a²i™ÄRÇVÁVˆIØ—<‘<Ø˜1˜i¨Ð+°A°q¸)ÀQÐ3GÑHÜ—j‘jð  ó ˆDð
 —‘Ø˜1˜d A�¨q°!°T¸1¨oÑ>Àeð ó ˆBð ˜�(‹Nñ	ðð" —‘˜�ò 	ˆØ�|‰|Ø˜%  tÐ,°U¸DÀ$ÈÐ4MÑNØ—/‘/Ó#ð ó 
ˆð �\‰\Ø˜%  tÐ,°U¸DÀ$ÈÐ4MÑNØ—-‘- §¡£
Ó+ð ó 
ˆð �Bˆh‹ñ	ùs   ‚EErE   c                 óª  — | j                  d¬«      j                  dd«      }| j                  d¬«      }t        j                  |d<   t	        j
                  t        d¬«      5  t        j                  ||«       ddd«       t	        j
                  t        d¬«      5  t        j                  ||«       ddd«       y# 1 sw Y   ŒDxY w# 1 sw Y   yxY w)	zValidate there's no inf in X.é    r$   é   rO   )é   r   zInput data contains `inf`©ÚmatchN)
r'   r*   r&   ÚinfÚpytestÚraisesÚ
ValueErrorÚxgboostÚQuantileDMatrixÚDMatrix)rE   rH   Úys      rK   Ú	check_infr�   Û   s©   € à�
‰
˜ˆ
Ó×#Ñ# A qÓ)€AØ�
‰
˜ˆ
Ó€AÜ�f‰f€A€d�Gä	�‰”zÐ)DÔ	Eñ &Ü×Ñ  1Ô%÷&ô 
�‰”zÐ)DÔ	Eñ Ü�‰˜˜1Ô÷ð ÷&ð &ú÷ð ús   Á#B=ÂC	Â=CÃ	Cc                  ó|   — t        j                  d«      } | j                  «       }|j                  |j                  fS )z2Fetch the California housing dataset from sklearn.úsklearn.datasets)rz   ÚimportorskipÚfetch_california_housingri   Útarget©Údatasetsri   s     rK   Úget_california_housingr‰   è   s6   € ô ×"Ñ"Ð#5Ó6€HØ×,Ñ,Ó.€DØ�9‰9�d—k‘kÐ!Ð!ó    c                  ó|   — t        j                  d«      } | j                  «       }|j                  |j                  fS )z&Fetch the digits dataset from sklearn.rƒ   )rz   r„   Úload_digitsri   r†   r‡   s     rK   Ú
get_digitsr�   ð   s6   € ô ×"Ñ"Ð#5Ó6€HØ×ÑÓ!€DØ�9‰9�d—k‘kÐ!Ð!rŠ   c                  óP   — t        j                  d«      } | j                  d¬«      S )z-Fetch the breast cancer dataset from sklearn.rƒ   T)Ú
return_X_y)rz   r„   Úload_breast_cancer)rˆ   s    rK   Ú
get_cancerr‘   ø   s)   € ô ×"Ñ"Ð#5Ó6€HØ×&Ñ&°$Ð&Ó7Ð7rŠ   c                  óŽ  — t        j                  d«      } t        j                  j	                  d«      }d}d}| j                  ||¬«      \  }}|j                  d||j                  «      }t        |j                  d   «      D ]<  }t        |j                  d   «      D ]  }|||f   sŒt        j                  |||f<   Œ! Œ> ||fS )zGenerate a sparse dataset.rƒ   éÇ   iÐ  g      è?)Úrandom_stater#   r   )
rz   r„   r&   r'   r(   Úmake_regressionrA   ÚshapeÚranger]   )	rˆ   rE   ÚnÚsparsityrH   r€   ÚflagÚiÚjs	            rK   Ú
get_sparser�   ÿ   sÁ   € ô ×"Ñ"Ð#5Ó6€HÜ
�)‰)×
Ñ
 Ó
$€CØ€AØ€HØ×#Ñ# A°CÐ#Ó8�D€A€qØ�<‰<˜˜8 Q§W¡WÓ-€DÜ�1—7‘7˜1‘:Óò !ˆÜ�q—w‘w˜q‘zÓ"ò 	!ˆAØ�A�q�D‹zÜŸ&™&��!�Q�$’ñ	!ð!ð ˆaˆ4€KrŠ   c                  ó¨  ‡‡‡— t        j                  d«       ddlŠt        j                  j                  d«      ŠdŠ‰j                  «       } dt        t        t        t        f   t        f   dt        d‰j                  fˆˆˆfd	„} |d
dddddœd«      | d<    |ddddœd«      | d<    |dddddœd«      | d<    |ddd d!d"d#d$d%œd«      | d&<    |d'd(d)d!d*œd+«      | d,<    |d-d(d.d/d0d"d1d2d3œd«      | d4<    |d5d6d7d8d9d:œd;«      | d<<    |d=d>d?d@d$dAœd«      | dB<    |dCdDdd"dEœd«      | dF<    |d@dGdGdHœdI«      | dJ<   dKt        dLt        dt        d‰j                  fˆˆˆfdM„} |dNdOd«      | dP<    |dQdRd«      | dS<    |dTdUd«      | dV<    |dWdXd«      | dY<    |dZd[d«      | d\<    |d]d^d«      | d_<    |d`dad«      | db<    |dcddd«      | de<    |dfdgd«      | dh<    |didjd«      | dk<   t        | j                  «      }‰j                  |«       | |   } t        j                  ‰f¬l«      }| j                  D ]q  }t!        | |   j"                  ‰j$                  «      r:|| |   j&                  j(                  j+                  t        j,                  «      z  }Œ`|| |   j.                  z  }Œs |dm|j1                  «       z  z  }|dn|j3                  «       z
  z  }| |fS )oam  Get a synthetic version of the amse housing dataset.

    The real one can be obtained via:

    .. code-block::

        from sklearn import datasets

        datasets.fetch_openml(data_id=42165, as_frame=True, return_X_y=True)

    Number of samples: 1460
    Number of features: 20
    Number of categorical features: 10
    Number of numerical features: 10
    r%   r   Nr   i´  Ú
name_probaÚdensityr   c           	      óÎ  •— t        ‰	d|z
  z  «      }t        j                  d|z
  «      dkD  xr |dkD  }|rd|z
  }|| t        j                  <   t	        | j                  «       «      }t	        | j                  «       «      }|dxx   dt        j                  |«      z
  z  cc<   ‰j                  |‰	|¬«      }‰
j                  |‰
j                  t        d„ |«      «      ¬«      }|S )	Nr#   rS   ç�íµ ÷Æ°>r   éÿÿÿÿ)r    Úpc                 ó"   — t        | t        «      S ©N)ra   Ústr)Úxs    rK   ú<lambda>z5get_ames_housing.<locals>.synth_cat.<locals>.<lambda>:  s   € ¤¨A¬sÓ!3€ rŠ   r!   )Úintr&   Úabsr]   ÚlistÚkeysÚvaluesÚsumÚchoicerb   rd   Úfilter)rŸ   r    Ún_nullsÚhas_nanr™   r­   r¤   r¨   Úseriesr   rD   rE   s            €€€rK   Ú	synth_catz#get_ames_housing.<locals>.synth_cat(  sÚ   ø€ ô �i 1 w¡;Ñ/Ó0ˆÜ—&‘&˜˜w™Ó'¨$Ñ.Ò>°7¸Q±;ˆÙØ˜W‘}ˆHØ!)ˆJ”r—v‘vÑä�J—O‘OÓ%Ó&ˆÜ�×"Ñ"Ó$Ó%ˆØ	ˆ"‹�”r—v‘v˜a“y‘Ñ ‹Ø�J‰J�t )¨qˆJÓ1ˆà—‘ØØ×%Ñ%äÑ3°TÓ:óð ó 
ˆð ˆrŠ   gqu Ä]½ê?gqh”.ý³?gs½m¦B<¢?gö5Cª(ž?goEb‚¾•?)Ú1FamÚ2fmConÚDuplexÚTwnhsÚTwnhsErS   ÚBldgTypegÿwD…Ú?g. �Ò¥Ò?g)$™Õ;ÜÎ?)ÚUnfÚRFnÚFingš_Í‚9î?ÚGarageFinishg¸Wæ­ºÇ?gàºbFx{°?gàºbFx{ ?gQfƒL2rf?)ÚCornerÚCulDSacÚFR2ÚFR3Ú	LotConfiggŠãÀ«åÎí?g/°ŒØ—?g˜Âƒf×½•?g�$A¸
…?gØó5Ëe£ƒ?g()° ¦l?g[³ÐÎiF?)ÚTypÚMin2ÚMin1ÚModÚMaj1ÚMaj2ÚSevÚ
Functionalg ©MœÜïâ?gì�±¾�Ó?gì¿ÎM›q¶?)ÚNoneÚBrkFaceÚStoneÚBrkCmng3ùf›Óï?Ú
MasVnrTypeg3ùf›Óß?gI/j÷« »?gÏ,	PSË¦?gÇeÜÔ@ó™?gQ¡º¹øÛ~?góZ	Ý%qv?)Ú1StoryÚ2Storyz1.5FinÚSLvlÚSFoyerz1.5Unfz2.5Unfz2.5FinÚ
HouseStyleg$	ÂP¨Ð?gHÀèòæpË?gýøK‹ú$—?g‡¥�Õ�?g‡4*p²Œ?)ÚGdÚTAÚFaÚExÚPog»E`¬oàà?ÚFireplaceQugÈ™&l?ì?çš™™™™™¹?gØó5Ëe£“?gÿunÚŒÓ`?)rØ   r×   rÙ   rÚ   rÛ   Ú	ExterCondgn0Ôa…Ûã?g{g´UIdÕ?)rØ   r×   rÚ   rÙ   Ú	ExterQualgÖ8›Ž nV?)r×   rÚ   rÙ   g(îx“ß¢s?ÚPoolQCÚlocÚstdc                 ó  •— ‰j                  | |‰¬«      }t        ‰d|z
  z  «      }t        j                  d|z
  «      dkD  r,|dkD  r'‰j	                  ‰|d¬«      }t        j
                  ||<   ‰j                  |t        j                  ¬«      S )	N)rá   Úscaler    r#   rS   r¢   r   F)r    Úreplacer!   )Únormalrª   r&   r«   r°   r]   rb   r;   )	rá   râ   r    r¨   r²   Únull_idxr   rD   rE   s	         €€€rK   Ú	synth_numz#get_ames_housing.<locals>.synth_numŸ  s}   ø€ Ø�J‰J˜3 c°	ˆJÓ:ˆÜ�i 1 w¡;Ñ/Ó0ˆÜ�6‰6�#˜‘-Ó  4Ò'¨G°aªKØ—z‘z )°'À5�zÓIˆHÜŸ&™&ˆAˆh‰KØ�y‰y˜¤"§*¡*ˆyÓ-Ð-rŠ   gmt‚žÖF@gOfK“<Q=@Ú	3SsnPorchgÝ¹sçÎ�ã?g2TÁf¡ä?Ú
FireplacesgR×áö u­?gP$Í[r�Î?ÚBsmtHalfBathgˆvS�Ø?g_Æ-£à?ÚHalfBathgbÄˆ#Fü?g†–+êç?Ú
GarageCarsg$á[Q<@g"$#eœú?ÚTotRmsAbvGrdg$á[Q<º{@g%�³Ç‘�|@Ú
BsmtFinSF1ge0ÇôOFG@g*Óš{7*d@Ú
BsmtFinSF2gŽNÐÓÚ­—@g�¡CÓ×k€@Ú	GrLivAreagóg6.@gò‘äûòàK@ÚScreenPorch)r–   güìÎ(eó@gåý.‘ÉA)rz   r„   r%   r&   r'   Údefault_rngr   r   r   r§   Úfloatrb   r¬   ÚcolumnsÚshuffleÚzerosra   r"   rd   ÚcatÚcodesrc   r;   r®   râ   Úmean)	rJ   rµ   rè   rõ   r€   Úcr   rD   rE   s	         @@@rK   Úget_ames_housingrü     sÄ  ú€ ô" ×Ñ˜Ô!Ûä
�)‰)×
Ñ
 Ó
%€CØ€IØ	�‰‹€BðÜœœs¤E˜zÑ*¬EÐ1Ñ2ðÜ=Bðà	�‰÷ñ. àØØØØñ	
ð 	ó	€B€z�Nñ #Ø °(Ñ;¸Wó€B€~Ññ  àØØØñ		
ð 	ó€B€{�Oñ !àØØØØØØñ	
ð 	ó€B€|Ññ !àØØØñ		
ð 	ó€B€|Ññ !àØØØØØØØñ		
ð 	ó€B€|Ññ "àØØØØñ	
ð 	ó	€B€}Ññ  àØØØØñ	
ð 	ó	€B€{�Oñ  àØØØñ		
ð 	ó€B€{�Oñ àØØñ	
ð
 	ó€B€x�Lð.”uð .¤5ð .´5ð .¸R¿Y¹Y÷ .ñ  Ð 2Ð4EÀsÓK€B€{�OÙ Ð!2Ð4FÈÓL€B€|ÑÙ"Ð#7Ð9LÈcÓR€B€~ÑÙÐ2Ð4FÈÓL€B€z�NÙ Ð!3Ð5GÈÓM€B€|ÑÙ"Ð#4Ð6HÈ#ÓN€B€~ÑÙ Ð!2Ð4EÀsÓK€B€|ÑÙ Ð!2Ð4FÈÓL€B€|ÑÙÐ 1Ð3DÀcÓJ€B€{�OÙ!Ð"4Ð6HÈ#ÓN€B€}Ñä�2—:‘:Ó€GØ‡K�K�ÔØ	ˆG‰€Bô 	�‰˜	�|Ô$€AØ�Z‰Zò ˆÜ�b˜‘e—k‘k 2×#6Ñ#6Ô7Ø��A‘—‘—‘×'Ñ'¬¯
©
Ó3Ñ3‰Aà��A‘—‘Ñ‰Að	ð Ð	˜QŸU™U›WÑ	$Ñ$€AØÐ	˜aŸf™f›hÑ	&Ñ&€Aàˆqˆ5€LrŠ   Údpathc           	      ób  — t        j                  d«      }d}t        j                  j	                  | d«      }t        j                  j                  |«      st        j                  ||¬«       t        j                  |d«      5 }|j                  | ¬«       ddd«       |j                  t        j                  j	                  | d«      t        j                  j	                  | d	«      t        j                  j	                  | d
«      fdd¬«      \	  }}}}}	}
}}}|||||	|
|||f	S # 1 sw Y   Œ�xY w)zFetch the mq2008 dataset.rƒ   z>https://s3-us-west-2.amazonaws.com/xgboost-examples/MQ2008.zipz
MQ2008.zip)ÚurlÚfilenameÚr)ÚpathNzMQ2008/Fold1/train.txtzMQ2008/Fold1/test.txtzMQ2008/Fold1/vali.txtTF)Úquery_idÚ
zero_based)rz   r„   Úosr  ÚjoinÚexistsr   ÚurlretrieveÚzipfileÚZipFileÚ
extractallÚload_svmlight_files)rý   rˆ   Úsrcr†   ÚfÚx_trainÚy_trainÚ	qid_trainÚx_testÚy_testÚqid_testÚx_validÚy_validÚ	qid_valids                 rK   Ú
get_mq2008r  Å  s#  € ô ×"Ñ"Ð#5Ó6€HØ
J€CÜ�W‰W�\‰\˜% Ó.€FÜ�7‰7�>‰>˜&Ô!Ü×Ñ ¨fÕ5ä	�‰˜ Ó	%ð !¨Ø	�‰˜%ˆÔ ÷!ð 	×$Ñ$ä�G‰G�L‰L˜Ð 8Ó9Ü�G‰G�L‰L˜Ð 7Ó8Ü�G‰G�L‰L˜Ð 7Ó8ð	
ð
 Øð 	%ó 	ñ
ØØØØØØØØØð 	ØØØØØØØØð
ð 
÷/!ð !ús   ÂD%Ä%D.Fr   )Ú	vary_sizer”   Ún_samples_per_batchÚ	n_batchesÚuse_cupyr  r”   c                ó¦  — g }g }g }|r ddl }	|	j                  j                  |«      }
nt        j                  j                  |«      }
t	        |«      D ]x  }|r| |dz  z   n| }|
j                  ||«      }|
j                  |«      }|
j                  dd|¬«      }|j                  |«       |j                  |«       |j                  |«       Œz |||fS )zMake batches of dense data.r   Né
   r#   r   )Úcupyr'   r(   r&   r—   ÚrandnÚuniformÚappend)r  r   r  r  r  r”   rH   r€   Úwr  rE   r›   r   Ú_XÚ_yÚ_ws                   rK   Úmake_batchesr'  þ  sÉ   € ð 	€AØ
€AØ
€AÙÛà�k‰k×%Ñ% lÓ3‰ä�i‰i×#Ñ# LÓ1ˆÜ�9Óò ˆÙ4=Ð'¨!¨b©&Ò0ÐCVˆ	Ø�Y‰Y�y *Ó-ˆØ�Y‰Y�yÓ!ˆØ�[‰[˜Q Q¨Yˆ[Ó7ˆØ	�‰�ŒØ	�‰�ŒØ	�‰��ðð ˆa�ˆ7€NrŠ   c                   óH  — e Zd ZU dZej
                  ed<   ej                  e	j                     ed<   ej                  e	j                     ed<   ej                  e	j                     ed<   ej                  e	j                     ed<   ej                  e	j                     ed<   y)	Ú	ClickFoldzCA structure containing information about generated user-click data.rH   r€   ÚqidÚscoreÚclickÚposN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú
csr_matrixÚ__annotations__ÚnptÚNDArrayr&   r+   r:   r,   © rŠ   rK   r)  r)    sp   … áMà×ÑÓØ
‡{�{�2—8‘8ÑÓØ	�‰�R—X‘XÑ	ÓØ�;‰;�r—z‘zÑ"Ó"Ø�;‰;�r—x‘xÑ Ó Ø	�‰�R—X‘XÑ	ÔrŠ   r)  c                   ó<   — e Zd ZU dZeed<   eed<   eed<   defd„Zy)Ú	RelDataCVzPSimple data struct for holding a train-test split of a learning to rank dataset.ÚtrainÚtestÚmax_relr   c                 ó    — | j                   dk(  S )z6Whether the label consists of binary relevance degree.r#   )r;  )Úselfs    rK   Ú	is_binaryzRelDataCV.is_binary2  s   € à�|‰|˜qÑ Ð rŠ   N)	r.  r/  r0  r1  ÚRelDatar3  rª   rC   r>  r6  rŠ   rK   r8  r8  +  s    … ÙZàƒNØ
ƒMØƒLð!˜4ô !rŠ   r8  c                   ó¾   — e Zd ZdZdeddfd„Zdej                  ej                     dej                  ej                     dej                  ej                     fd„Zy)	ÚPBMa  Simulate click data with position bias model. There are other models available in
    `ULTRA <https://github.com/ULTR-Community/ULTRA.git>`_ like the cascading model.

    References
    ----------
    Unbiased LambdaMART: An Unbiased Pairwise Learning-to-Rank Algorithm

    Úetar   Nc                 ó    — t        j                  g d¢«      | _        t        j                  g d¢«      }t        j                  ||«      | _        y )N)rÝ   g{®GázÄ?çìQ¸…ëÑ?g¤p=
×£à?rS   )
gÃõ(\�Âå?g…ëQ¸…ã?g¸…ëQ¸Þ?gÃõ(\�ÂÕ?rD  gš™™™™™É?g)\�Âõ(¼?rÝ   g{®Gáz´?g¸…ëQ¸®?)r&   r?   Ú
click_probÚpowerÚ	exam_prob)r=  rB  rG  s      rK   Ú__init__zPBM.__init__A  s8   € äŸ(™(Ò#?Ó@ˆŒÜ—H‘HÚHó
ˆ	ô Ÿ™ )¨SÓ1ˆ�rŠ   ÚlabelsÚpositionc                 óÜ  — t        j                  |d¬«      }t        j                  |j                  «      }d||dk  <   d||t	        | j
                  «      k\  <   | j
                  |   }t        j                  |j                  «      }|j                  |j                  k(  sJ ‚t        j                  |d¬«      }d||| j                  j                  k\  <   | j                  |   }t         j                  j                  d«      }|j                  |j                  d   t         j                  ¬«      }t        j                  |j                  t         j                  ¬«      }d||||z  k  <   |S )	z©Sample clicks for one query based on input relevance degree and position.

        Parameters
        ----------

        labels :
            relevance_degree

        T)Úcopyr   r£   r   )r    r"   r!   r#   )r&   r?   r÷   r–   ÚlenrE  r    rG  r'   ró   r:   r+   )	r=  rI  rJ  rE  rG  ÚranksrE   ÚprobÚclickss	            rK   Úsample_clicks_for_queryzPBM.sample_clicks_for_queryJ  s  € ô —‘˜& tÔ,ˆä—X‘X˜fŸl™lÓ+ˆ
àˆˆv˜‰zÑà13ˆˆvœ˜TŸ_™_Ó-Ñ-Ñ.Ø—_‘_ VÑ,ˆ
ä—H‘H˜VŸ\™\Ó*ˆ	Ø�}‰} §¡Ò+Ñ+Ü—‘˜¨Ô-ˆà.0ˆˆe�t—~‘~×*Ñ*Ñ*Ñ+Ø—N‘N 5Ñ)ˆ	ä�i‰i×#Ñ# DÓ)ˆØ�z‰z˜vŸ|™|¨A™´b·j±jˆzÓAˆä(*¯©°·±ÄRÇXÁXÔ(NˆØ01ˆˆt�i *Ñ,Ñ,Ñ-ØˆrŠ   )r.  r/  r0  r1  rô   rH  r4  r5  r&   r+   r,   rQ  r6  rŠ   rK   rA  rA  7  s^   „ ñð2˜Eð 2 dó 2ð!Ø—k‘k "§(¡(Ñ+ð!Ø7:·{±{À2Ç8Á8Ñ7Lð!à	�‰�R—X‘XÑ	ô!rŠ   rA  r¨   c           
      ó   — t        j                  | «      } | j                  }t         j                  dt        j                  t        j
                  | dd | dd d¬«       «      dz   f   }t        j                  t         j                  ||f   «      }| |   }t        j                  |t        j                  | j                  g«      «      }|||fS )zzRun length encoding using numpy, modified from:
    https://gist.github.com/nvictus/66627b580c13068589957d6ab0919e66

    r   r#   Nr£   T)Ú	equal_nan)	r&   Úasarrayr    Úr_ÚflatnonzeroÚiscloseÚdiffr"  r?   )r¨   r˜   ÚstartsÚlengthsr®   Úindptrs         rK   Úrlencoder\  n  s¨   € ô
 	�
‰
�1‹€AØ	�‰€AÜ�U‰U�1”b—n‘n¤b§j¡j°°1°2°¸¸#¸2¸È$Ô&OÐ%OÓPÐSTÑTÐTÑU€FÜ�g‰g”b—e‘e˜F A˜IÑ&Ó'€GØˆv‰Y€FÜ�Y‰Y�vœrŸx™x¨¯©¨Ó1Ó2€Fà�7˜FÐ"Ð"rŠ   rH   r€   r*  Úsample_ratec                 óê  — t         j                  j                  d«      }t        | j                  d   |z  «      }t        j
                  d| j                  d   t         j                  ¬«      }|j                  |«       |d| }| |   }||   }||   }	t        j                  |	«      }
||
   }||
   }|	|
   }	t        j                  dd¬«      }|j                  |||	¬«       |j                  | «      }|S )	z«We use XGBoost to generate the initial score instead of SVMRank for
    simplicity. Sample rate is set to 0.1 by default so that we can test with small
    datasets.

    r   r   r!   Nz	rank:ndcgÚhist)Ú	objectiveÚtree_method)r*  )r&   r'   ró   rª   r–   Úaranger3   rö   Úargsortr}   Ú	XGBRankerÚfitÚpredict)rH   r€   r*  r]  rE   r   ÚindexÚX_trainr  r  Ú
sorted_idxÚltrÚscoress                rK   Úinit_rank_scorerl  }  sæ   € ô �)‰)×
Ñ
 Ó
%€CÜ�A—G‘G˜A‘J Ñ,Ó-€IÜ�I‰I�a˜Ÿ™ ™¬2¯9©9Ô5€EØ‡K�K�ÔØ�*�9Ð€Eà�‰h€GØ�‰h€GØ�E‘
€Iô —‘˜IÓ&€JØ�jÑ!€GØ�jÑ!€GØ˜*Ñ%€Iä
×
Ñ
 k¸vÔ
F€CØ‡G�GˆG�W )€GÔ,ð �[‰[˜‹^€FØ€MrŠ   ÚfoldÚscores_foldc                 ó4  — | \  }}}|j                   t        j                  k(  sJ ‚t        j                  |«      }t        j                  |j
                  ft        j                  ¬«      }t        j                  |j
                  ft        j                  ¬«      }t        d¬«      }|D ]f  }	|	|k(  }
|
j                  |
j                  d   «      }
||
   }t        j                  |«      ddd…   }|||
<   ||
   }|j                  ||«      }|||
<   Œh |j                  d   |j                  d   k(  sJ |j                  |j                  f«       ‚|j                  d   |j                  d   k(  sJ |j                  |j                  f«       ‚t        ||||||«      S )zSimulate clicks for one fold.r!   rS   )rB  r   Nr£   )r"   r&   r+   ÚuniqueÚemptyr    r,   rA  r*   r–   rc  rQ  r)  )rm  rn  ÚX_foldÚy_foldÚqid_foldÚqidsrJ  rP  ÚpbmÚqÚqid_maskÚquery_scoresÚquery_positionÚrelevance_degreesÚquery_clickss                  rK   Úsimulate_one_foldr}  ¡  sf  € ð
  $Ñ€FˆF�HØ�>‰>œRŸX™XÒ%Ñ%ä�9‰9�XÓ€Dä�x‰x˜Ÿ™˜¬b¯h©hÔ7€HÜ�X‰X�v—{‘{�n¬B¯H©HÔ5€FÜ
�#Œ,€Cð ò 
(ˆØ˜‘=ˆØ×#Ñ# H§N¡N°1Ñ$5Ó6ˆØ" 8Ñ,ˆäŸ™ LÓ1±$°B°$Ñ7ˆØ+ˆ�Ñà" 8Ñ,ÐØ×2Ñ2Ð3DÀnÓUˆØ'ˆˆxÒð
(ð �<‰<˜‰?˜hŸn™n¨QÑ/Ò/ÐO°&·,±,ÀÇÁÐ1OÔOØ�<‰<˜‰?˜fŸl™l¨1™oÒ-ÐK°·±¸f¿l¹lÐ/KÔKä�V˜V X¨{¸FÀHÓMÐMrŠ   Úcv_datac           	      ód  ‡‡‡‡‡‡— t        t        | j                  | j                  «      «      \  }}}t	        j
                  dg|D �cg c]  }|j                  d   ‘Œ c}z   «      }t	        j                  |«      }t        |«      dk(  sJ ‚t        j                  |«      }t	        j                  |«      }t	        j                  |«      }t        |||«      }	t        d|j                  «      D �
cg c]  }
|	||
dz
     ||
    ‘Œ }}
g g g g g g f\  ŠŠŠŠŠŠt        |j                  dz
  «      D ]¿  }
t        ||
   ||
   ||
   f||
   «      }‰j!                  |j"                  «       ‰j!                  |j$                  «       ‰j!                  |j&                  «       ‰j!                  |j(                  «       ‰j!                  |j*                  «       ‰j!                  |j,                  «       ŒÁ t        |j                  dz
  «      D �
cg c]  }
‰|
   ‘Œ	 }}
t        d«      D ]  }
||
   ||
   k(  j/                  «       rŒJ ‚ t        ‰«      dk(  r(t1        ‰d   ‰d   ‰d   ‰d   ‰d   ‰d   «      }d}||fS ˆˆˆˆˆˆfd„t        t        ‰«      «      D «       \  }}||fS c c}w c c}
w c c}
w )z6Simulate click data using position biased model (PBM).r   rN   r#   r   Nc           
   3   ób   •K  — | ]&  }t        ‰|   ‰|   ‰|   ‰|   ‰|   ‰|   «      –— Œ( y ­wr¦   )r)  )Ú.0r›   ÚX_lstÚc_lstÚp_lstÚq_lstÚs_lstÚy_lsts     €€€€€€rK   ú	<genexpr>z"simulate_clicks.<locals>.<genexpr>è  s@   øè ø€ ò 
àô �e˜A‘h  a¡¨%°©(°E¸!±H¸eÀA¹hÈÈaÉ×Qñ
ùs   ƒ,/)r¬   Úzipr9  r:  r&   r?   r–   ÚcumsumrM  r   ÚvstackÚconcatenaterl  r—   r    r}  r"  rH   r€   r*  r+  r,  r-  Úallr)  )r~  rH   r€   r*  Úvr[  ÚX_fullÚy_fullÚqid_fullÚscores_fullr›   rk  rm  Úscores_check_1r9  r:  r‚  rƒ  r„  r…  r†  r‡  s                   @@@@@@rK   Úsimulate_clicksr”  Ä  sr  ý€ ä”S˜Ÿ™¨¯©Ó5Ó6�I€A€qˆ#ô �X‰X�q�c°Ö3¨A˜QŸW™W Q›ZÒ3Ñ3Ó4€FÜ�Y‰Y�vÓ€Fäˆv‹;˜%ÒÑÜ�]‰]˜1Ó€FÜ�^‰^˜AÓ€FÜ�~‰~˜cÓ"€Hô " &¨&°(Ó;€Kä>CÀAÀvÇ{Á{Ó>SÖT¸ˆk˜&  Q¡™-¨&°©)Ò4ÐT€FÐTà/1°2°r¸2¸rÀ2Ð/EÑ,€Eˆ5�%˜  uÜ�6—;‘; ‘?Ó#ò ˆÜ  ! A¡$¨¨!©¨c°!©fÐ!5°v¸a±yÓAˆØ�‰�T—V‘VÔØ�‰�T—V‘VÔØ�‰�T—X‘XÔØ�‰�T—Z‘ZÔ Ø�‰�T—Z‘ZÔ Ø�‰�T—X‘XÕðô ).¨f¯k©k¸A©oÓ(>Ö? 1�e˜A“hÐ?€NÐ?Ü�1‹Xò 6ˆØ˜qÑ! V¨A¡YÑ.×3Ñ3Õ5Ñ5ð6ô ˆ5ƒz�Q‚Ü˜% ™( E¨!¡H¨e°A©h¸¸a¹À%ÈÁ(ÈEÐRSÉHÓUˆØˆð �$ˆ;Ð÷	
ð 
äœ3˜u›:Ó&ô
‰ˆˆtð �$ˆ;ÐùòG 4ùò Uùò @s   Á	J#
Ã1J(ÈJ-rP  r-  c           
      óÜ  — t        j                  |«      }| |   } ||   }||   }||   }t        |«      \  }}}t        d|j                  «      D �]  }||dz
     }	||   }
|	|
k  s	J |	|
f«       ‚t        j
                  ||	|
 «      j                  dk(  s	J |	|
f«       ‚||	|
 }|j                  «       dk(  sJ |j                  «       «       ‚|j                  «       |j                  dz
  k\  s9J |j                  «       |j                  |t        j
                  ||	|
 «      f«       ‚t        j                  |«      }| |	|
 |   | |	|
 ||	|
 |   ||	|
 ||	|
 |   ||	|
 ||	|
 |   ||	|
 �Œ | |||f}|S )z,Sort data based on query index and position.r#   r   )r&   rc  r\  r—   r    rp  ÚminÚmax)rH   r€   r*  rP  r-  ri  r[  Ú_r›   ÚbegÚendÚ	query_posri   s                rK   Úsort_ltr_samplesrœ  ï  s   € ô —‘˜C“€JØ	ˆ*‰€AØ�JÑ€FØ
ˆj‰/€CØ
ˆj‰/€Cä˜C“=�L€FˆAˆqä�1�f—k‘kÓ"ó 0ˆØ�Q˜‘U‰mˆØ�Q‰iˆà�SŠyÐ$˜3 ˜*Ô$Ü�y‰y˜˜S ˜Ó&×+Ñ+¨qÒ0Ð<°3¸°*Ô<à˜˜C�Lˆ	Ø�}‰}‹ !Ò#Ð4 Y§]¡]£_Ô4Ø�}‰}‹ )§.¡.°1Ñ"4Ò4ð 	
Ø�M‰M‹OØ�N‰NØÜ�I‰I�c˜#˜c�lÓ#ð	7
ô 	
ô —Z‘Z 	Ó*ˆ
à�s˜3�Z 
Ñ+ˆˆ#ˆcˆ
Ø   S˜/¨*Ñ5ˆˆs�3ˆØ�s˜3�Z 
Ñ+ˆˆ#ˆcˆ
à˜3˜s�| JÑ/ˆˆC�Šð+0ð. ˆf�a˜Ð€Dà€KrŠ   ÚDTypeÚDMatrixTÚdevicec                 óì  — t         j                  j                  «       } | |j                  ddd¬«      j	                  t         j
                  «      j                  dd«      «      }t        |d«      r|j                  dd…df   }n	|dd…df   }|} ||||¬	«      }t        j                  t        d
¬«      5  t        j                  d|dœ|«       ddd«       t        |d«      �sö | |j                  «       j                  dd«      «      }||k(  j                  «       sJ ‚|j                   j"                  j$                  du sJ ‚|j                   j"                  j&                  du sJ ‚|j)                  |j                   ¬	«        | |j                  «       j                  dd«      «      }||j                   k(  j                  «       sJ ‚|}|j+                  |«       |j                  «       }	|j+                  |j                  d|j,                  «      «       |j                  «       }
|
|	k(  j                  «       sJ ‚|j	                  t         j.                  «      }|j+                  |«       |j                  «       }||	k(  j                  «       sJ ‚|j                  dddd«      }t        j                  t        d
¬«      5  |j+                  |«       ddd«       yy# 1 sw Y   �ŒxY w# 1 sw Y   yxY w)zRun tests for base margin.r   rS   éd   r$   é2   r   ÚilocN)Úbase_marginz.*base_margin.*rw   r_  )ra  rŸ  FTr#   rv   )r&   r'   ró   ræ   rc   r:   r*   Úhasattrr£  rz   r{   r|   r}   r9  Úget_base_marginr�  ÚTÚflagsÚc_contiguousÚf_contiguousÚset_infoÚset_base_marginr    r;   )r�  rž  rŸ  rE   rH   r€   r¤  ÚXyÚgotÚbm_colÚbm_rowÚbm_f64s               rK   Úrun_base_margin_infor²     s  € ô �)‰)×
Ñ
Ó
!€CÙˆc�j‰j˜˜C cˆjÓ*×1Ñ1´"·*±*Ó=×EÑEÀbÈ!ÓLÓM€AÜˆq�&ÔØ�F‰F’1�a�4‰L‰àŠa�ˆd‰GˆØ€Ká	�!�Q KÔ	0€Bä	�‰”zÐ);Ô	<ñ EÜ�‰ f¸Ñ?ÀÔD÷Eô �1�fÕá�B×&Ñ&Ó(×0Ñ0°°QÓ7Ó8ˆØ�{Ñ"×'Ñ'Ô)Ñ)à�}‰}×"Ñ"×/Ñ/°5Ñ8Ñ8Ø�}‰}×"Ñ"×/Ñ/°4Ñ7Ñ7Ø
�‰ §¡ˆÔ.Ù�B×&Ñ&Ó(×0Ñ0°°BÓ7Ó8ˆØ�{—}‘}Ñ$×)Ñ)Ô+Ñ+ð ˆØ
×Ñ˜;Ô'Ø×#Ñ#Ó%ˆØ
×Ñ˜;×.Ñ.¨q°+×2BÑ2BÓCÔDØ×#Ñ#Ó%ˆØ˜&Ñ ×%Ñ%Ô'Ñ'ð "×(Ñ(¬¯©Ó4ˆØ
×Ñ˜;Ô'Ø×#Ñ#Ó%ˆØ˜&Ñ ×%Ñ%Ô'Ñ'ð —i‘i  1 a¨Ó+ˆÜ�]‰]œ:Ð-?Ô@ñ 	,Ø×Ñ˜{Ô+÷	,ð 	,ð7 ÷Eñ Eú÷<	,ð 	,ús   Â7KËK*ËK'Ë*K3)F)rÝ   )Fr1  r  r	  Údataclassesr   r   r   r   r   r   r   r	   r
   r   r   r   r   Úurllibr   Únumpyr&   rz   r4  Únumpy.randomÚRNGÚscipyr   r}   Úxgboost.datar   Úcompatr   Ú
DataFrameTr„   r   ÚMemoryÚmemoryrª   ÚndarrayrL   rj   rr   r�   Úcacher‰   r�   r‘   r�   rü   r§   r2  r  rC   r'  r5  r+   r?  r)  r8  rA  r\  rô   r:   rl  r}  r”  r,   rœ  r   r²  r6  rŠ   rK   ú<module>rÀ     s.  ðá $Û 	Û Ý !÷÷ ÷ ñ õ ã Û Ý Ý )Ý ã Ý .áÞ0à€Jà	ˆ×	Ñ	˜XÓ	&€Ø	�‰�|¨QˆÓ	/€ð8Øð8Ø #ð8àˆu�R—Z‘Z §¡Ð+Ñ,¨d°DÐ8Ñ9ó8ðv<�9ó <ð~7˜ó 7ðt
�3ð 
˜4ó 
ð ‡�ð"  b§j¡j°"·*±*Ð&<Ñ =ò "ó ð"ð ‡�ð"�E˜"Ÿ*™* b§j¡jÐ0Ñ1ò "ó ð"ð ‡�ð8�E˜"Ÿ*™* b§j¡jÐ0Ñ1ò 8ó ð8ð ‡�ð�E˜"Ÿ*™* b§j¡jÐ0Ñ1ò ó ðð  ‡�ðq˜% 
¨B¯J©JÐ 6Ñ7ò qó ðqðh ‡�ð5Øð5à
Ø
×ÑØ‡J�JØ‡J�JØ
×ÑØ‡J�JØ‡J�JØ
×ÑØ‡J�JØ‡J�Jðñ
ò5ó ð5ðx ð	ð ØòØðàðð ðð ð	ð ðð ðð ˆ4�—
‘
Ñ˜T "§*¡*Ñ-¨t°B·J±JÑ/?Ð?Ñ@óð< �×!Ñ! 3§;¡;¨r¯x©xÑ#8¸#¿+¹+ÀbÇhÁhÑ:OÐOÑ
P€ð ÷ð ó ðô	!�
ô 	!÷4ñ 4ðn#�—‘˜BŸH™HÑ%ð #¨%°·±¸S¿[¹[È#Ï+É+Ð0UÑ*Vó #ð& ñ	!Ø×Ñð!à
‡{�{�2—8‘8Ñð!ð 
�‰�R—X‘XÑ	ð!ð ð	!ð
 	‡[�[�—‘Ñó!ðHNØ
�×!Ñ! 3§;¡;¨r¯x©xÑ#8¸#¿+¹+ÀbÇhÁhÑ:OÐOÑ
PðNà—‘˜RŸZ™ZÑ(ðNð óNðF(˜Yð (¨5°¸HÀYÑ<OÐ1OÑ+Pó (ðV.Ø×Ñð.à
‡{�{�2—8‘8Ñð.ð 
�‰�R—X‘XÑ	ð.ð �K‰K˜Ÿ™Ñ!ð	.ð
 
�‰�R—X‘XÑ	ð.ð Ø
×ÑØ‡K�K�—‘ÑØ‡K�K�—‘ÑØ‡K�K�—‘Ñðñó.ðb-,Øð-,Ø# G§O¡OÑ4ð-,Ø>Að-,à	ô-,rŠ   