Ë
    ÜÍ:j¨¹  ã                   óD  — 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 d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ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%m&Z&m'Z' d dl(m)Z)m*Z* ejV                  jY                  deef«      d„ «       Z-ejV                  jY                  dddggidfdddgddggidfddgd ggidfg«      d„ «       Z.ejV                  jY                  dddg«      d„ «       Z/d„ Z0ejV                  jY                  dg d¢«      ejV                  jY                  d dd!g«      d"„ «       «       Z1ejV                  jY                  d  e2dd#«      «      ejV                  jY                  d$ e2d!d#«      «      ejV                  jY                  dd%d&g«      ejV                  jY                  dd'dg«      d(„ «       «       «       «       Z3ejV                  jY                  d)d*gd+d,g«      d-„ «       Z4ejV                  jY                  g d.¢d%d!d ejj                  d dgd!d/gd0d1gg«      fd%d! ejj                  g d2¢«       ejj                  ddgd3d/gd0d1gg«      fd%d3d ejj                  d dgdd0gd3d4gd0d1gg«      fd&d!d ejj                  d dgd!d!gd0d1gg«      fd&d! ejj                  g d2¢«       ejj                  ddgd#d/gd0d1gg«      fg«      d5„ «       Z6ejV                  jY                  d)d*gd+d,g«      d6„ «       Z7d7„ Z8d8„ Z9ejV                  jY                  d d!d#g«      d9„ «       Z:ejV                  jY                  d)d*gd+d,g«      ejV                  jY                  d g d:¢«      d;„ «       «       Z;d<„ Z<ejV                  jY                  d  e2dd!«      «      ejV                  jY                  dd%d&g«      ejV                  jY                  dg d=¢«      ejV                  jY                  d>d?d@g«      dA„ «       «       «       «       Z=ejV                  jY                  d$d#d4g«      ejV                  jY                  d>d@d?g«      ejV                  jY                  d d!d3g«      ejV                  jY                  dg d=¢«      ejV                  jY                  dBd?d@g«      dC„ «       «       «       «       «       Z>ejV                  jY                  dg d=¢«      ejV                  jY                  dBd?d@g«      dD„ «       «       Z?ejV                  jY                  dg d=¢«      ejV                  jY                  dBd?d@g«      dE„ «       «       Z@ejV                  jY                  dd dFidGfd dHidGfd dIidGfd dJidKfg«      dL„ «       ZA ej„                  «       dM„ «       ZCejV                  jY                  dNd!d@d? eDdd«      fd!d?d? eDdd«      fd!d@d@d dgfd!d?d@dgfdOd@d?g dP¢fdOd?d?dd!gfdOd@d@d gfdOd?d@g fg«      ejV                  jY                  dQdge*z   e)z   «      dR„ «       «       ZE ej„                  «       dS„ «       ZFejV                  jY                  dNdd@d? eDd d0«      fdd?d? eDdd0«      fdd@d@g dT¢fdd?d@g dU¢fdVd@d?g dW¢fdVd?d?g dX¢fdVd@d@d d3gfdVd?d@d3gfd!d@d? eDdd«      fd!d?d? eDdd«      fd!d@d@g dT¢fd!d?d@g dU¢fdOd@d?g dY¢fdOd?d? eDd!d«      fdOd@d@d d3gfdOd?d@d3gfdZd@d?g d[¢fdZd?d?g d\¢fdZd@d@d gfdZd?d@g fg«      ejV                  jY                  dQdge*z   e)z   «      d]„ «       «       ZGd^„ ZHejV                  jY                  g d_¢dd@d?eIfdd@d?eIfdd@d?ej”                  fdd@d?ej–                  fd!d?d?ej–                  fd!d?d@ej–                  fd3d?d?ej–                  fd3d?d@ej–                  fg«      ejV                  jY                  d`e)«      da„ «       «       ZLejV                  jY                  g d_¢dd@d?eIfdd@d?eIfdd@d?ej”                  fdd@d?ej–                  fd!d?d?ej–                  fd!d?d@ej–                  fg«      ejV                  jY                  dbe*«      dc„ «       «       ZMejV                  jY                  ddg de¢«      ejV                  jY                  dfg dg¢«      ejV                  jY                  dhd@d?g«      ejV                  jY                  d>d@d?g«      ejV                  jY                  dbe*«      di„ «       «       «       «       «       ZNejV                  jY                  g d_¢dd@d?ej”                  fdd@d?ej–                  fd!d?d?ej–                  fd!d?d@ej–                  fg«      ejV                  jY                  dbe*«      dj„ «       «       ZOejV                  jY                  g dk¢g dl¢«      ejV                  jY                  dbe*«      dm„ «       «       ZPejV                  jY                  d>dhgg dn¢«      ejV                  jY                  dbe*«      do„ «       «       ZQejV                  jY                  g dp¢g dq¢«      ejV                  jY                  dbe*«      dr„ «       «       ZRejV                  jY                  dhd@d?g«      ejV                  jY                  d>d@d?g«      ejV                  jY                  dbe*«      ds„ «       «       «       ZSejV                  jY                  dtdudvd eI ej¨                   ejª                  ej¬                  «      j®                  «      dz   «      fdwd eI ej¨                   ejª                  ej¬                  «      j®                  «      «      fg«      ejV                  jY                  dhd@d?g«      ejV                  jY                  d>d@d?g«      ejV                  jY                  dbe*«      dx„ «       «       «       «       ZXejV                  jY                  dhd@d?g«      ejV                  jY                  d>d@d?g«      ejV                  jY                  dbe*«      dy„ «       «       «       ZYejV                  jY                  dze*e)z   «      d{„ «       ZZd|„ Z[ejV                  j¹                  ejº                  d}k(  d~d@¬«      ejV                  jY                  dbe*«      d€„ «       «       Z^ejV                  jY                  d� e«       «      ejV                  jY                  dhd@d?g«      ejV                  jY                  d>d@d?g«      ejV                  jY                  d g d‚¢«      dƒ„ «       «       «       «       Z_ejV                  jY                  d� e«       «      d„„ «       Z`y)…é    N)Úassert_allcloseÚassert_array_equal)Úsparse)ÚBSpline)Úrandom)Úconfig_context)ÚLinearRegression)ÚPipeline)ÚKBinsDiscretizerÚPolynomialFeaturesÚSplineTransformer)Ú_get_sizeof_LARGEST_INT_t)Ú_is_numpy_namespaceÚget_namespaceÚmove_toÚ)yield_namespace_device_dtype_combinations©Údevice)Ú	_get_mask)Ú_array_api_for_testsÚassert_allclose_dense_sparseÚassert_array_almost_equal)ÚCSC_CONTAINERSÚCSR_CONTAINERSÚestc                 ó*  — t        j                  d«      j                  dd«      }d„ } | | «       j                  |«      «      sJ ‚ | | d¬«      j                  |«      «      sJ ‚t        j                   | d¬«      j                  |«      «      sJ ‚y)	z+Test that output array has the given order.é
   é   é   c                 ó@   — t        j                  | j                  «      S )N)ÚnpÚ	isfortranÚT)Úas    ú€/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/sklearn/preprocessing/tests/test_polynomial.pyÚis_c_contiguousz?test_polynomial_and_spline_array_order.<locals>.is_c_contiguous0   s   € Ü�|‰|˜AŸC™CÓ Ð ó    ÚC©ÚorderÚFN)r!   ÚarangeÚreshapeÚfit_transformr"   )r   ÚXr&   s      r%   Ú&test_polynomial_and_spline_array_orderr0   +   s~   € ô 	�	‰	�"‹×Ñ˜a Ó#€Aò!ñ ™3›5×.Ñ.¨qÓ1Ô2Ð2Ð2Ù™3 Sœ>×7Ñ7¸Ó:Ô;Ð;Ð;Ü�<‰<™ #œ×4Ñ4°QÓ7Ô8Ð8Ñ8r'   zparams, err_msgÚknotsé   z0Number of knots, knots.shape\[0\], must be >= 2.r   z*knots.shape\[1\] == n_features is violatedz(knots must be sorted without duplicates.c                 ó¤   — dgdgg}t        j                  t        |¬«      5  t        di | ¤Žj	                  |«       ddd«       y# 1 sw Y   yxY w)zATest that we raise errors for invalid input in SplineTransformer.r2   r   ©ÚmatchN© )ÚpytestÚraisesÚ
ValueErrorr   Úfit©ÚparamsÚerr_msgr/   s      r%   Ú(test_spline_transformer_input_validationr>   8   sJ   € ð ˆˆqˆcˆ
€Aä	�‰”z¨Ô	1ñ +ÜÑ#˜FÑ#×'Ñ'¨Ô*÷+÷ +ñ +úó   ¢AÁAÚextrapolationÚcontinueÚperiodicc                 óª   — t        j                  d«      j                  dd«      }ddgddgddgddgddgg}t        d	|| ¬
«      j	                  |«      }y)zATest that SplineTransformer accepts integer value knot positions.é   r   r   r   r2   r   é   é   é   )Údegreer1   r@   N)r!   r,   r-   r   r.   )r@   r/   r1   Ú_s       r%   Ú%test_spline_transformer_integer_knotsrJ   H   s`   € ô 	�	‰	�"‹×Ñ˜b !Ó$€AØ�ˆV�a˜�V˜a ˜V b¨" X°°B¨xÐ8€EÜØ˜¨]ô	ç�m�AÓñ r'   c                  ó@  — t        j                  d«      j                  dd«      } t        ddd¬«      j	                  | «      }|j                  «       }t        |g d¢«       t        ddd¬«      j	                  | «      }|j                  d	d
g«      }t        |g d¢«       y)z<Test that SplineTransformer generates correct feature names.rD   r   r   rG   T)Ún_knotsrH   Úinclude_bias)
Úx0_sp_0Úx0_sp_1Úx0_sp_2Úx0_sp_3Úx0_sp_4Úx1_sp_0Úx1_sp_1Úx1_sp_2Úx1_sp_3Úx1_sp_4Fr$   Úb)Úa_sp_0Úa_sp_1Úa_sp_2Úa_sp_3Úb_sp_0Úb_sp_1Úb_sp_2Úb_sp_3N)r!   r,   r-   r   r:   Úget_feature_names_outr   )r/   ÚspltÚfeature_namess      r%   Ú%test_spline_transformer_feature_namesrd   R   s’   € ä
�	‰	�"‹×Ñ˜b !Ó$€AÜ Q¨q¸tÔD×HÑHÈÓK€DØ×.Ñ.Ó0€MÜØò	
ôô   Q¨q¸uÔE×IÑIÈ!ÓL€DØ×.Ñ.°°S¨zÓ:€MÜØò		
õr'   )ÚconstantÚlinearrA   rB   rH   rG   c                 ó<  — t        j                  d«      j                  dd«      }t        || ¬«      j	                  |«      }|j                  ddg«      }t        |«      |j                  k(  sJ ‚|j                  |«      }|j                  d   t        |«      k(  sJ ‚y)	zsTest feature names are correct for different extrapolations and degree.

    Non-regression test for gh-25292.
    rD   r   r   )rH   r@   r$   rX   r2   N)
r!   r,   r-   r   r:   ra   ÚlenÚn_features_out_Ú	transformÚshape)r@   rH   r/   rb   rc   ÚX_transs         r%   Ú7test_split_transform_feature_names_extrapolation_degreerm   x   sŒ   € ô 	�	‰	�"‹×Ñ˜b !Ó$€AÜ F¸-ÔH×LÑLÈQÓO€DØ×.Ñ.°°S¨zÓ:€MÜˆ}Ó ×!5Ñ!5Ò5Ð5Ð5à�n‰n˜QÓ€GØ�=‰=˜Ñœs =Ó1Ò1Ð1Ñ1r'   r   rL   ÚuniformÚquantilere   c                 óh  — t        j                  ddd«      dd…df   }t         j                  dgg|ddd…dd…f   dggf   }|ddd…dd…f   }|dk(  r|| z   }t        || |d|¬«      }|j	                  |«       ||fD ]2  }t        t        j                  |j                  |«      d¬	«      d«       Œ4 y)
z–Test that B-splines are indeed a decomposition of unity.

    Splines basis functions must sum up to 1 per row, if we stay in between boundaries.
    r   r2   éd   Nr   rB   T)rL   rH   r1   rM   r@   ©Úaxis)r!   ÚlinspaceÚr_r   r:   r   Úsumrj   )rH   rL   r1   r@   r/   ÚX_trainÚX_testrb   s           r%   Ú+test_spline_transformer_unity_decompositionry   ‹   sÆ   € ô 	�‰�A�q˜#Óšq $˜wÑ'€Aä�e‰e�a�S�E˜1™S˜q˜S¢!˜V™9¨ s eÐ+Ñ,€GØˆqˆt�!ˆt’Qˆw‰Z€Fà˜
Ò"Ø˜FÑ"ˆäØØØØØ#ô€Dð 	‡H�HˆWÔØ�vÐò >ˆÜœŸ™˜tŸ~™~¨aÓ0°qÔ9¸1Õ=ñ>r'   ÚbiasÚ	intercept©TF©FTc           	      ó.  — t        j                  ddd«      dd…df   }t        j                  |dd…df   «      dz   }t        dt	        dd| d	¬
«      fdt        |¬«      fg¬«      }|j                  ||«       t        |j                  |«      |d¬«       y)z7Test that B-splines fit a sinusodial curve pretty well.r   r   rq   Nr   Úsplineé   rG   re   ©rL   rH   rM   r@   Úols©Úfit_intercept©Ústepsçü©ñÒMbP?©Úrtol)	r!   rt   Úsinr
   r   r	   r:   r   Úpredict)rz   r{   r/   ÚyÚpipes        r%   Ú)test_spline_transformer_linear_regressionrŽ   ¨   s™   € ô 	�‰�A�r˜3Ó¢ 4 Ñ(€AÜ
�‰ˆq’�A�‰w‹˜!Ñ€AÜð Ü!ØØØ!%Ø",ô	ðð Ô$°9Ô=Ð>ð
ô€Dð 	‡H�HˆQ�„NÜ�D—L‘L “O Q¨TÖ2r'   )r1   rL   Úsample_weightÚexpected_knotsé   é   é   )r   r   r2   r2   r   rG   r2   é   r   c           
      ó¢   — t        j                  ddgddgddgddgddgddgddgg«      }t        j                  || ||¬	«      }t	        ||«       y
)zJCheck the behaviour to find knot positions with and without sample_weight.r   r   rG   r”   r’   r   r‘   r“   )r/   r1   rL   r�   N)r!   Úarrayr   Ú_get_base_knot_positionsr   )r1   rL   r�   r�   r/   Ú
base_knotss         r%   Ú/test_spline_transformer_get_base_knot_positionsr™   ¿   sb   € ô0 	�‰�1�a�&˜1˜a˜& 1 a &¨1¨a¨&°1°a°&¸1¸a¸&À1ÀbÀ'ÐJÓK€AÜ"×;Ñ;Ø
�5 '¸ô€Jô �J Õ/r'   c           	      ó”  — d„ }t        j                  ddd«      dd…df   }t        dt        dd| d	¬
«      fdt	        |¬«      fg¬«      }|j                  | ||dd…df   «      «       t        j                  ddd«      dd…df   }|j                  |«      }t        | ||dd…df   «      dd¬«       t        |dd |dd d¬«       y)z5Test that B-splines fit a periodic curve pretty well.c                 ó®   — t        j                  dt         j                  z  | z  «      t        j                  dt         j                  z  | z  «      z
  dz   S )Nr   r‘   rG   )r!   rŠ   Úpi)Úxs    r%   Úfz=test_spline_transformer_periodic_linear_regression.<locals>.fã   s<   € Ü�v‰v�aœ"Ÿ%™%‘i !‘mÓ$¤r§v¡v¨a´"·%±%©i¸!©mÓ'<Ñ<¸qÑ@Ð@r'   r   r2   ée   Nr   rD   rG   rB   r�   r‚   rƒ   r…   éÿÿÿÿr   i-  g{®Gáz„?)Úatolr‰   rq   éÈ   r‡   rˆ   )r!   rt   r
   r   r	   r:   r‹   r   )rz   r{   rž   r/   r�   ÚX_Úpredictionss          r%   Ú2test_spline_transformer_periodic_linear_regressionr¥   Þ   sÝ   € ò
Aô 	�‰�A�q˜#Óšq $˜wÑ'€AÜð Ü!ØØØ!%Ø",ô	ðð Ô$°9Ô=Ð>ð
ô€Dð 	‡H�HˆQ‘�!’A�q�D‘'“
Ôô 
�‰�R˜˜CÓ	 ¢ D Ñ	)€BØ—,‘,˜rÓ"€KÜ�K¡ 2¢a¨ d¡8£°4¸dÕCÜ�K  #Ð&¨°C¸Ð(<À4ÖHr'   c                  óJ  — t        j                  ddd«      dd…df   } d}t        |ddgdgd	gg¬
«      }|j                  | «      }t        j                  d	dgdd	gd	dgdd	gg«      }t        t        j                  dd«      ||d«      } || dd…df   «      }t        ||«       y)z@Test that the backport of extrapolate="periodic" works correctlyéþÿÿÿg      @r   Nr   rB   g      ð¿ç        ç      ð?©rH   r@   r1   éýÿÿÿr”   r   )r!   rt   r   r.   r–   r   r,   r   )r/   rH   ÚtransformerÚXtÚcoefÚsplÚXspls          r%   Ú0test_spline_transformer_periodic_spline_backportr±   þ   s³   € ä
�‰�B˜˜RÓ ¢ D Ñ)€AØ€Fô $Ø Z¸¸ÀÀÈÀuÐ7Mô€Kð 
×	"Ñ	" 1Ó	%€Bô �8‰8�c˜3�Z # s ¨c°3¨Z¸#¸s¸ÐDÓE€DÜ
”"—)‘)˜B Ó" D¨&°*Ó
=€CÙˆq’�A�‰w‹<€DÜ�B˜Õr'   c            
      ó  — t        j                  ddd«      dd…df   } t        dddgdgd	gd
gdgdgg¬«      }t        dddgd	gd
gdgdgdgg¬«      }|j                  | «      }|j                  | «      }t	        ||dd…g d¢f   «       y)zJTest if shifted knots result in the same transformation up to permutation.r   r   rŸ   NrG   rB   r¨   r©   ç      @ç      @ç      @ç       @rª   g      "@)r”   r   r2   r   rG   )r!   rt   r   r.   r   )r/   Útransformer_1Útransformer_2ÚXt_1ÚXt_2s        r%   Ú4test_spline_transformer_periodic_splines_periodicityr»     s­   € ä
�‰�A�r˜3Ó¢ 4 Ñ(€Aä%ØØ Øˆu�s�e˜c˜U S E¨C¨5°3°%Ð8ô€Mô &ØØ Øˆu�s�e˜c˜U S E¨C¨5°3°%Ð8ô€Mð ×&Ñ& qÓ)€DØ×&Ñ& qÓ)€Dä�D˜$šq¢/Ð1Ñ2Õ3r'   c           
      ó,  — t        j                  ddd«      dd…df   }t        | ddgdgdgd	gd
gdgg¬«      }|j                  |«      }|j	                  «       |j                  «       z
  t        |«      z  }d|z  }|}t        d| dz   «      D ]F  }t        j                  |d¬«      }t        j                  |«      j	                  «       |k  sJ ‚||z  }ŒH t        j                  |d¬«      }t        j                  |«      j	                  «       dkD  sJ ‚y)z?Test that spline transformation is smooth at first / last knot.r§   r   i'  NrB   r¨   r©   r³   r´   rµ   r¶   rª   r2   r   rr   )
r!   rt   r   r.   ÚmaxÚminrh   ÚrangeÚdiffÚabs)	rH   r/   r¬   r­   ÚdeltaÚtolÚdXtÚdrÀ   s	            r%   Ú3test_spline_transformer_periodic_splines_smoothnessrÆ   &  s  € ô 	�‰�B˜˜FÓ#¢A t GÑ,€Aä#ØØ Øˆu�s�e˜c˜U S E¨C¨5°3°%Ð8ô€Kð
 
×	"Ñ	" 1Ó	%€Bà�U‰U‹W�q—u‘u“wÑ¤# a£&Ñ(€EØ
ˆu‰*€Cà
€Cô �1�f˜q‘jÓ!ò ˆä�w‰w�s Ô#ˆÜ�v‰v�d‹|×ÑÓ! CÒ'Ð'Ð'à�U‰l‰ðô �7‰7�3˜QÔ€DÜ�6‰6�$‹<×ÑÓ Ò!Ð!Ñ!r'   )r2   r   rG   r”   r   c           	      ó  — t        j                  ddd«      dd…df   }|j                  «       }t        dt	        d|| d¬«      gd	t        |¬
«      gg«      }|j                  ||«       t        |j                  dgdgg«      ddg«       t        dt	        d|| d¬«      gd	t        |¬
«      gg«      }|j                  ||«       t        |j                  dgdgg«      ddg«       t	        d|| d¬«      }|j                  |«       d}t        j                  t        |¬«      5  |j                  dgg«       ddd«       t        j                  t        |¬«      5  |j                  dgg«       ddd«       y# 1 sw Y   ŒAxY w# 1 sw Y   yxY w)z1Test that B-spline extrapolation works correctly.r    r2   rq   Nr   r”   re   r�   r‚   rƒ   iöÿÿÿr   rf   Úerrorú2`X` contains values beyond the limits of the knotsr4   )r!   rt   Úsqueezer
   r   r	   r:   r   r‹   r7   r8   r9   rj   )rz   r{   rH   r/   rŒ   r�   rb   Úmsgs           r%   Ú%test_spline_transformer_extrapolationrÌ   M  s–  € ô
 	�‰�B˜˜3Ó¢ 4 Ñ(€AØ	�	‰	‹€Aô ð Ü!ØØ!Ø!%Ø",ô	ðð Ô$°9Ô=Ð>ð	
ó€Dð 	‡H�HˆQ�„NÜ�D—L‘L 3 %¨!¨ Ó.°°Q°Ô8ô ð Ü!ØØ!Ø!%Ø"*ô	ðð Ô$°9Ô=Ð>ð	
ó€Dð 	‡H�HˆQ�„NÜ�D—L‘L 3 %¨!¨ Ó.°°a°Ô9ô Ø˜&¨tÀ7ô€Dð 	‡H�HˆQ„KØ
>€CÜ	�‰”z¨Ô	-ñ  Ø�‰˜˜�wÔ÷ ä	�‰”z¨Ô	-ñ Ø�‰˜˜�uÔ÷ð ÷ ð  ú÷ð ús   Ä"E6ÅFÅ6E?ÆFc                 ó.  — t         j                  j                  | «      }|j                  d«      j	                  dd«      }d}|dz   }t        |ddd¬«      }|j                  |«      }t        |ddd	¬
«      }|j                  |«      }t        ||d¬«       y)zCTest that a B-spline of degree=0 is equivalent to KBinsDiscretizer.r¢   r2   r   r   ro   T)rL   rH   r1   rM   zonehot-denseÚaveraged_inverted_cdf)Ún_binsÚencodeÚstrategyÚquantile_methodg‚vIhÂ%<=rˆ   N)	r!   r   ÚRandomStateÚrandnr-   r   r.   r   r   )	Úglobal_random_seedÚrngr/   rÏ   rL   rb   ÚsplinesÚkbdÚkbinss	            r%   Ú'test_spline_transformer_kbindiscretizerrÚ   …  sš   € ä
�)‰)×
Ñ
Ð 2Ó
3€CØ�	‰	�#‹×Ñ˜s AÓ&€AØ€FØ�q‰j€GäØ ¨À$ô€Dð × Ñ  Ó#€Gä
ØØØØ/ô	€Cð ×Ñ˜aÓ €Eô �G˜U¨Ö/r'   )rÈ   re   rf   rA   rB   rM   FTc                 ó:  — t         j                  j                  |«      }|j                  d«      j	                  dd«      }t        | |||d¬«      }t        | |||d¬«      }|j                  |«       |j                  |«       |j                  |«      }	|j                  |«      }
t        j                  |	«      r|	j                  dk(  sJ ‚t        |
|	j                  «       «       t        j                  |d¬	«      }t        j                  |d¬	«      }t         j                  t        j                   |dz
  |d
«      t        j                   ||dz   d
«      f   }|dk(  rod}t#        j$                  t&        |¬«      5  |j                  |«       d d d «       d}t#        j$                  t&        |¬«      5  |j                  |«       d d d «       y t        |j                  |«      |j                  |«      j                  «       «       y # 1 sw Y   ŒzxY w# 1 sw Y   y xY w)Nr¢   é(   r   F)rH   r1   r@   rM   Úsparse_outputTÚcsrr   rr   r   rÈ   rÉ   r4   zOut of bounds)r!   r   rÓ   rÔ   r-   r   r:   rj   r   ÚissparseÚformatr   ÚtoarrayÚaminÚamaxru   rt   r7   r8   r9   )rH   r1   r@   rM   rÕ   rÖ   r/   Ú
splt_denseÚsplt_sparseÚX_trans_sparseÚX_trans_denseÚX_minÚX_maxÚX_extrarË   s                  r%   Ú%test_spline_transformer_sparse_outputrë   ž  sÖ  € ô �)‰)×
Ñ
Ð 2Ó
3€CØ�	‰	�#‹×Ñ˜r 1Ó%€Aä"ØØØ#Ø!Øô€Jô $ØØØ#Ø!Øô€Kð ‡N�N�1ÔØ‡O�O�AÔà ×*Ñ*¨1Ó-€NØ×(Ñ(¨Ó+€MÜ�?‰?˜>Ô*¨~×/DÑ/DÈÒ/MÐMÐMÜ�M >×#9Ñ#9Ó#;Ô<ô �G‰G�A˜AÔ€EÜ�G‰G�A˜AÔ€EÜ�e‰eÜ
�‰�E˜A‘I˜u bÓ)¬2¯;©;°u¸eÀa¹iÈÓ+LÐLñ€Gð ˜ÒØBˆÜ�]‰]œ:¨SÔ1ñ 	*Ø× Ñ  Ô)÷	*àˆÜ�]‰]œ:¨SÔ1ñ 	+Ø×!Ñ! 'Ô*÷	+ð 	+ô 	Ø× Ñ  Ó)¨;×+@Ñ+@ÀÓ+I×+QÑ+QÓ+Sõ	
÷	*ð 	*ú÷	+ð 	+ús   Å:HÆ1HÈHÈHrÝ   c                 óÜ   — t        | ||||¬«      }t        j                  ddd«      dd…df   }|j                  |«       |j	                  |«      j
                  d   |j                  k(  sJ ‚y)z8Test that transform results in n_features_out_ features.)rL   rH   rM   r@   rÝ   r   r2   r   N)r   r!   rt   r:   rj   rk   ri   )rL   rM   rH   r@   rÝ   rb   r/   s          r%   Ú&test_spline_transformer_n_features_outrí   Ô  sm   € ô ØØØ!Ø#Ø#ô€Dô 	�‰�A�q˜"Óša ˜gÑ&€AØ‡H�HˆQ„Kà�>‰>˜!Ó×"Ñ" 1Ñ%¨×)=Ñ)=Ò=Ð=Ñ=r'   c                 óô  — t        j                  ddgddgddgddgddggt         j                  ¬«      }|j                  «       }t         j                  |d<   d}t        j                  t        t        j                  |«      ¬	«      5  t        ddd
| ¬«      }|j                  |«       ddd«       t        ddd| |¬«      }|j                  |«      }|j                  |«      j                  |«      }t        ||«       |j                  |g d¢¬«      }t        ||«       |j                  |«      ddd…   }	|j                  |«      j                  |ddd…   «      }
t        |	|
«       t        |t         j                  «      }t        j                   ||j"                  d   j$                  j&                  d   d¬«      }||   dk(  j)                  «       sJ ‚|j                  |«      }t+        j,                  |«      r|j/                  «       }|dk\  j)                  «       sJ ‚|dk  j)                  «       sJ ‚|j                  |«      }|j                  |«      }t        ||    ||    «       y# 1 sw Y   �ŒÆxY w)zãTest that SplineTransformer handles missing values correctly.
    We only test for knots="uniform", since for "quantile" the metrics are calculated
    differently with nans present and a different result is thus expected.
    r2   r   rG   r”   r   ©Údtype)rG   r   zJInput X contains NaN values and `SplineTransformer` is configured to errorr4   rÈ   )rH   rL   Úhandle_missingr@   NÚzeros©rH   rL   rñ   r@   rÝ   )r2   r2   r2   r2   r2   )r�   r   rr   )r!   r–   Úfloat64ÚcopyÚnanr7   r8   r9   ÚreÚescaper   r.   r:   rj   r   r   ÚrepeatÚ	bsplines_Úcrk   Úallr   rß   rá   )r@   rÝ   r/   ÚX_nanrË   r   ÚX_nan_transformÚX_nan_fit_then_transformÚ"X_nan_transform_with_sample_weightÚX_nan_transform_same_shapeÚ X_nan_transform_different_shapesÚnan_maskÚencoded_nan_maskÚX_transforms                 r%   Ú.test_spline_transformer_handles_missing_valuesr  ì  sk  € ô 	�‰�1�a�&˜1˜a˜& 1 a &¨1¨a¨&°1°a°&Ð9ÄÇÁÔL€AØ�F‰F‹H€EÜ—&‘&€Eˆ$�Kð W€CÜ	�‰”z¬¯©°3«Ô	8ñ $Ü"ØØØ"Ø'ô	
ˆð 	×Ñ˜UÔ#÷$ô ØØØØ#Ø#ô€Fð ×*Ñ*¨5Ó1€OØ%Ÿz™z¨%Ó0×:Ñ:¸5ÓAÐÜ  Ð2JÔKð *0×)=Ñ)=Øš_ð *>ó *Ð&ô ! Ð2TÔUð "(×!5Ñ!5°eÓ!<¹S¸q¸SÑ!AÐØ'-§z¡z°%Ó'8×'BÑ'BÀ5ÉÈ1ÈÁ:Ó'NÐ$Ü Ø"Ð$Dôô
 ˜¤§¡Ó'€HÜ—y‘y ¨6×+;Ñ+;¸AÑ+>×+@Ñ+@×+FÑ+FÀqÑ+IÐPQÔRÐØÐ,Ñ-°Ñ2×7Ñ7Ô9Ð9Ð9ð ×*Ñ*¨5Ó1€OÜ‡��Ô'Ø)×1Ñ1Ó3ˆØ˜qÑ ×%Ñ%Ô'Ð'Ð'Ø˜qÑ ×%Ñ%Ô'Ð'Ð'ð ×&Ñ& qÓ)€KØ×*Ñ*¨5Ó1€OÜ ØÐ%Ð%Ñ&¨Ð9IÐ8IÑ(Jõ÷s$ñ $ús   Â!I-É-I7c                 ó  — t        j                  ddgddgddgddgddgg«      }t        j                  t         j                  t         j                  gt         j                  dgg«      }t        ddd| |¬«      }|j	                  |«       |j                  |«      }t        |t         j                  «      }t        j                  ||j                  d   j                  j                  d   d¬	«      }||   dk(  j                  «       sJ ‚y
)zZTest that SplineTransformer encodes missing values to zeros even for
    all-nan-features.r2   r   rG   r”   r   rò   ró   r   rr   N)r!   r–   rö   r   r:   rj   r   rù   rú   rû   rk   rü   )r@   rÝ   r/   ÚX_nan_full_columnr   Úall_missing_column_encodedr  r  s           r%   Ú(test_spline_transformer_handles_all_nansr
  9  sò   € ô 	�‰�1�a�&˜1˜a˜& 1 a &¨1¨a¨&°1°a°&Ð9Ó:€AÜŸ™¤2§6¡6¬2¯6©6Ð"2´R·V±V¸Q°KÐ!@ÓAÐäØØØØ#Ø#ô€Fð ‡J�JÐ Ô!à!'×!1Ñ!1Ð2CÓ!DÐÜÐ*¬B¯F©FÓ3€HÜ—y‘y ¨6×+;Ñ+;¸AÑ+>×+@Ñ+@×+FÑ+FÀqÑ+IÐPQÔRÐØ&Ð'7Ñ8¸AÑ=×BÑBÔDÐDÑDr'   )r    r   z&degree=\(min_degree, max_degree\) must)r   g      ø?©rG   r   )r2   r   rG   z'int or tuple \(min_degree, max_degree\)c                 ó¤   — dgdgg}t        j                  t        |¬«      5  t        di | ¤Žj	                  |«       ddd«       y# 1 sw Y   yxY w)zBTest that we raise errors for invalid input in PolynomialFeatures.r2   r   r4   Nr6   )r7   r8   r9   r   r:   r;   s      r%   Ú)test_polynomial_features_input_validationr  S  sJ   € ð ˆˆqˆcˆ
€Aä	�‰”z¨Ô	1ñ ,ÜÑ$˜VÑ$×(Ñ(¨Ô+÷,÷ ,ñ ,úr?   c                  óÂ   — t        j                  d«      d d …t         j                  f   } t        j                  t        j                  | «      | | dz  | dz  g«      }| |fS )Nr’   r   rG   )r!   r,   ÚnewaxisÚhstackÚ	ones_like)r/   ÚPs     r%   Úsingle_feature_degree3r  d  sL   € ä
�	‰	�!‹’QœŸ
™
�]Ñ#€AÜ
�	‰	”2—<‘< “? A q¨!¡t¨Q°©TÐ2Ó3€AØˆaˆ4€Kr'   z/degree, include_bias, interaction_only, indices©r   rG   )r   r   rG   ÚX_containerc                 óJ  — | \  }}|� ||«      }t        |||¬«      j                  |«      }|j                  |«      }	|�|	j                  «       }	t	        |	|dd…|f   «       |j
                  dkD  r2|j                  j                  |j
                  |j                  fk(  sJ ‚yy)z9Test PolynomialFeatures on single feature up to degree 3.N©rH   rM   Úinteraction_onlyr   ©	r   r:   rj   rá   r   Ún_output_features_Úpowers_rk   Ún_features_in_)
r  rH   rM   r  Úindicesr  r/   r  ÚtfÚouts
             r%   Ú$test_polynomial_features_one_featurer   k  s¨   € ð. "�D€A€qØÐÙ˜‹NˆÜ	Ø LÐCSô
ç	�cˆ!ƒfð ð �,‰,�q‹/€CØÐØ�k‰k‹mˆÜ�C˜š1˜g˜:™Ô'Ø	×Ñ˜qÒ Ø�z‰z×Ñ B×$9Ñ$9¸2×;LÑ;LÐ#MÒMÐMÑMð !r'   c                  óp  — t        j                  d«      j                  d«      } | d d …d d…f   }| d d …dd …f   }t        j                  |dz  |dz  z  |dz  |dz  z  |dz  |dz  z  |dz  |dz  z  |dz  |dz  z  |dz  |dz  z  |dz  |dz  z  |dz  |dz  z  |dz  |dz  z  |dz  |dz  z  g
«      }| |fS )Nr’   r  r2   r   r   rG   )r!   r,   r-   r  )r/   Úx1Úx2r  s       r%   Útwo_features_degree3r$  �  sî   € ä
�	‰	�!‹×Ñ˜VÓ$€AØ	
Š1ˆbˆqˆbˆ5‰€BØ	
Š1ˆa‰bˆ5‰€BÜ
�	‰	à�‰E�B˜‘E‰MØ�‰E�B˜‘E‰MØ�‰E�B˜‘E‰MØ�‰E�B˜‘E‰MØ�‰E�B˜‘E‰MØ�‰E�B˜‘E‰MØ�‰E�B˜‘E‰MØ�‰E�B˜‘E‰MØ�‰E�B˜‘E‰MØ�‰E�B˜‘E‰Mð	
ó	€Að ˆaˆ4€Kr'   )r   r2   r   r”   )r2   r   r”   ©r   r   )r   rG   r”   r   )rG   r”   r   )r   rG   r”   r   r’   é   r‘   é	   ©rG   rG   )r   r’   r&  r‘   r'  )r’   r&  r‘   r'  c                 óJ  — | \  }}|� ||«      }t        |||¬«      j                  |«      }|j                  |«      }	|�|	j                  «       }	t	        |	|dd…|f   «       |j
                  dkD  r2|j                  j                  |j
                  |j                  fk(  sJ ‚yy)z5Test PolynomialFeatures on 2 features up to degree 3.Nr  r   r  )
r$  rH   rM   r  r  r  r/   r  r  r  s
             r%   Ú%test_polynomial_features_two_featuresr*  ¦  s©   € ðF  �D€A€qØÐÙ˜‹NˆÜ	Ø LÐCSô
ç	�cˆ!ƒfð ð �,‰,�q‹/€CØÐØ�k‰k‹mˆÜ�C˜š1˜g˜:™Ô'Ø	×Ñ˜qÒ Ø�z‰z×Ñ B×$9Ñ$9¸2×;LÑ;LÐ#MÒMÐMÑMð !r'   c                  ó  — t        j                  d«      j                  dd«      } t        dd¬«      j	                  | «      }|j                  «       }t        g d¢|«       t        |«      |j                  | «      j                  d   k(  sJ ‚t        dd	¬«      j	                  | «      }|j                  g d
¢«      }t        g d¢|«       t        |«      |j                  | «      j                  d   k(  sJ ‚t        dd	¬«      j	                  | «      }|j                  g d
¢«      }t        g d¢|«       t        |«      |j                  | «      j                  d   k(  sJ ‚t        ddd¬«      j	                  | «      }|j                  g d
¢«      }t        ddg|«       t        |«      |j                  | «      j                  d   k(  sJ ‚t        dd¬«      j	                  | «      }|j                  g d¢«      }t        g d¢|«       y )Né   r   rG   r   T©rH   rM   )
Ú1Úx0r"  r#  zx0^2zx0 x1zx0 x2zx1^2zx1 x2zx2^2r2   F)r$   rX   rû   )r$   rX   rû   úa^2úa búa cúb^2úb cúc^2úa^3úa^2 búa^2 cúa b^2úa b cúa c^2úb^3úb^2 cúb c^2úc^3r  )r0  r1  r2  r3  r4  r5  r6  r7  r8  r9  r:  r;  r<  r=  r>  r?  r(  r  r.  r:  )úF40Dõ   â˜®õ   ×�)r.  r@  rA  rB  )
r!   r,   r-   r   r:   ra   r   rh   rj   rk   )r/   Úpolyrc   s      r%   Útest_polynomial_feature_namesrD  ×  sÕ  € Ü
�	‰	�"‹×Ñ˜b !Ó$€AÜ Q°TÔ:×>Ñ>¸qÓA€DØ×.Ñ.Ó0€MÜÚRØôô ˆ}Ó §¡°Ó!2×!8Ñ!8¸Ñ!;Ò;Ð;Ð;ä Q°UÔ;×?Ñ?ÀÓB€DØ×.Ñ.ªÓ?€MÜò	
ð* 	ô-ô0 ˆ}Ó §¡°Ó!2×!8Ñ!8¸Ñ!;Ò;Ð;Ð;ä V¸%Ô@×DÑDÀQÓG€DØ×.Ñ.ªÓ?€MÜò	
ð$ 	ô'ô* ˆ}Ó §¡°Ó!2×!8Ñ!8¸Ñ!;Ò;Ð;Ð;äØ D¸4ôç	�cˆ!ƒfð 	ð ×.Ñ.ªÓ?€MÜ˜˜W�~ }Ô5Üˆ}Ó §¡°Ó!2×!8Ñ!8¸Ñ!;Ò;Ð;Ð;ô  Q°TÔ:×>Ñ>¸qÓA€DØ×.Ñ.Ò/QÓR€MÜÒ>ÀÕNr'   )ÚdegrM   r  rð   Úcsc_containerc                 óÊ  — t         j                  j                  |«      }|j                  ddd«      } ||«      }t	        | ||¬«      }	|	j                  |j                  |«      «      }
|	j                  |j                  |«      «      }t        j                  |
«      r|
j                  dk(  sJ ‚|
j                  |j                  k(  sJ ‚t        |
j                  «       |«       y )Nr   r   ©rq   r   ©rM   r  Úcsc©r!   r   rÓ   Úrandintr   r.   Úastyper   rß   rà   rð   r   rá   )rE  rM   r  rð   rF  rÕ   rÖ   r/   ÚX_cscr   ÚXt_cscÚXt_denses               r%   Útest_polynomial_features_csc_XrQ  #  s¾   € ô" �)‰)×
Ñ
Ð 2Ó
3€CØ�‰�A�q˜(Ó#€AÙ˜!Ó€Eä
Ø˜,Ð9Iô€Cð ×Ñ˜uŸ|™|¨EÓ2Ó3€FØ× Ñ  §¡¨%£Ó1€Hä�?‰?˜6Ô" v§}¡}¸Ò'=Ð=Ð=Ø�<‰<˜8Ÿ>™>Ò)Ð)Ð)Ü˜fŸn™nÓ.°Õ9r'   Úcsr_containerc                 óÎ  — t         j                  j                  |«      }|j                  ddd«      } ||«      }t	        | ||¬«      }	|	j                  |j                  |«      «      }
|	j                  |j                  |d¬«      «      }t        j                  |
«      r|
j                  dk(  sJ ‚|
j                  |j                  k(  sJ ‚t        |
j                  «       |«       y )Nr   r   rH  rI  F)rõ   rÞ   rK  )rE  rM   r  rð   rR  rÕ   rÖ   r/   ÚX_csrr   ÚXt_csrrP  s               r%   Útest_polynomial_features_csr_XrV  C  sÃ   € ô �)‰)×
Ñ
Ð 2Ó
3€CØ�‰�A�q˜(Ó#€AÙ˜!Ó€Eä
Ø˜,Ð9Iô€Cð ×Ñ˜uŸ|™|¨EÓ2Ó3€FØ× Ñ  §¡¨%°e Ó!<Ó=€Hä�?‰?˜6Ô" v§}¡}¸Ò'=Ð=Ð=Ø�<‰<˜8Ÿ>™>Ò)Ð)Ð)Ü˜fŸn™nÓ.°Õ9r'   Ú
n_features)r2   r”   r   zmin_degree, max_degree))r   r2   )r   r   )r2   rG   )r   r”   )rG   r”   r  c                 óø   —  |dgdg| dz
  gff«      }t        |||¬«      }|j                  |«       |j                  }t        j                  | d|||¬«      }	|t	        |	D �
cg c]  }
d‘Œ c}
«      k(  sJ ‚yc c}
w )z?
    Test that n_output_features_ is calculated correctly.
    r2   r   )rH   r  rM   ©rW  Ú
min_degreeÚ
max_degreer  rM   N)r   r:   r  Ú_combinationsrv   )rW  rZ  r[  r  rM   rR  r�   r   Ú
num_combosÚcombosrI   s              r%   Útest_num_combinationsr_  a  s�   € ñ 	˜�s˜a˜S :°¡>Ð"2Ð3Ð4Ó5€AÜ
ØØ)Ø!ô€Cð
 ‡G�GˆA„JØ×'Ñ'€Jä×-Ñ-ØØØØ)Ø!ô€Fð œ¨Ö0 AšaÒ0Ó1Ò1Ð1Ñ1ùÒ0s   Á"	A7
c                 ó   —  |t        ddd|¬«      «      }|j                  «       }t        | ||¬«      }|j                  |j	                  |«      «      }	|j                  |j	                  |«      «      }
t        j                  |	«      r|	j                  dk(  sJ ‚|	j                  |
j                  k(  sJ ‚t        |	j                  «       |
«       y )Néè  r   ç      à?©Úrandom_staterI  rÞ   )
Úsparse_randomrá   r   r.   rM  r   rß   rà   rð   r   )rE  rM   r  rð   rR  rÕ   rT  r/   r   rU  rP  s              r%   Ú%test_polynomial_features_csr_X_floatsrf  �  s®   € ñ œ-¨¨b°#ÐDVÔWÓX€EØ�‰‹€Aä
Ø˜,Ð9Iô€Cð ×Ñ˜uŸ|™|¨EÓ2Ó3€FØ× Ñ  §¡¨%£Ó1€Hä�?‰?˜6Ô" v§}¡}¸Ò'=Ð=Ð=Ø�<‰<˜8Ÿ>™>Ò)Ð)Ð)Ü˜fŸn™nÓ.°Õ9r'   )Úzero_row_indexrE  r  ))r   r   T)r2   r   T©r   r   T)r   rG   T)r2   rG   T)r   rG   T)r   r   F)r2   r   F©r   r   F)r   rG   F)r2   rG   F)r   rG   Fc                 óv  —  |t        ddd|¬«      «      }d|| d d …f<   |j                  «       }t        |d|¬«      }|j                  |«      }|j                  |«      }	t	        j
                  |«      r|j                  dk(  sJ ‚|j                  |	j                  k(  sJ ‚t        |j                  «       |	«       y )	NrG   r   r©   rc  r¨   FrI  rÞ   ©	re  rá   r   r.   r   rß   rà   rð   r   )
rg  rE  r  rR  rÕ   rT  r/   r   rU  rP  s
             r%   Ú'test_polynomial_features_csr_X_zero_rowrl  œ  s§   € ñ* œ-¨¨2¨sÐASÔTÓU€EØ"€Eˆ.š!Ð
ÑØ�‰‹€Aä
˜S¨uÐGWÔ
X€CØ×Ñ˜uÓ%€FØ× Ñ  Ó#€Hä�?‰?˜6Ô" v§}¡}¸Ò'=Ð=Ð=Ø�<‰<˜8Ÿ>™>Ò)Ð)Ð)Ü˜fŸn™nÓ.°Õ9r'   ))TTr|   r}   )FFc                 ód  —  |t        ddd|¬«      «      }|j                  «       }t        d| |¬«      }|j                  |«      }|j                  |«      }t	        j
                  |«      r|j                  dk(  sJ ‚|j                  |j                  k(  sJ ‚t        |j                  «       |«       y )Nra  r   rb  rc  r”   rI  rÞ   rk  )	rM   r  rR  rÕ   rT  r/   r   rU  rP  s	            r%   Ú'test_polynomial_features_csr_X_degree_4rn  À  s�   € ñ œ-¨¨b°#ÐDVÔWÓX€EØ�‰‹€Aä
Ø	˜Ð7Gô€Cð ×Ñ˜uÓ%€FØ× Ñ  Ó#€Hä�?‰?˜6Ô" v§}¡}¸Ò'=Ð=Ð=Ø�<‰<˜8Ÿ>™>Ò)Ð)Ð)Ü˜fŸn™nÓ.°Õ9r'   )rE  Údimr  )
)r   r2   Trh  )rG   r2   T)rG   r   T)rG   rG   T)r   r2   Fri  )rG   r2   F)rG   r   F)rG   rG   Fc                 ób  —  |t        d|d|¬«      «      }|j                  «       }t        | |¬«      }|j                  |«      }|j                  |«      }	t	        j
                  |«      r|j                  dk(  sJ ‚|j                  |	j                  k(  sJ ‚t        |j                  «       |	«       y )Nra  rb  rc  )r  rÞ   rk  )
rE  ro  r  rR  rÕ   rT  r/   r   rU  rP  s
             r%   Ú(test_polynomial_features_csr_X_dim_edgesrq  Ö  s›   € ñ& Ü�d˜C Ð3EÔFó€Eð 	�‰‹€Aä
˜SÐ3CÔ
D€CØ×Ñ˜uÓ%€FØ× Ñ  Ó#€Hä�?‰?˜6Ô" v§}¡}¸Ò'=Ð=Ð=Ø�<‰<˜8Ÿ>™>Ò)Ð)Ð)Ü˜fŸn™nÓ.°Õ9r'   c           
      óZ  ‡ — ˆ fd„}d}d}t         j                  }t        j                  ddt         j                  ¬«      }t        j                  |dz
  |dz
  |dz
  |dz
  g«      }t        j                  |dz
  |dz
  |dz
  |dz
  gt         j                  ¬«      }	 ||||	ff||f|¬«      }
t        ‰ |d¬	«      }|j                  |d
d|j                  |j                  ¬«      }|t        j                  t         j                  «      j                  kD  r8d}t        j                  t        |¬«      5  |j                  |
«       ddd«       y|j!                  |
«      }|j#                  «       \  }}||z   } |||	t%        ‰  «         |	d   «      |z   }|r	dg|dz
  z  ng }|r	d
g|dz
  z  ng }t'        d«      D �]  }|d|z     }|d|z  dz      }|	d|z     }|	d|z  dz      }|r"|j)                  d«       |j)                  d
«       |j+                  ||g«       |j+                  |t%        |«      z   |t%        |«      z   g«       ‰ sS|j+                  ||z  ||z  ||z  g«       |j+                   ||||«      |z    ||||«      |z    ||||«      |z   g«       Œá|j+                  ||z  g«       |j)                   ||||«      |z   «       �Œ t%        |«      dz   dt%        ‰  «      z  z   }|j,                  |dz   k(  sJ ‚|j.                  |k(  sJ ‚|j0                  ||dz   fk(  sJ ‚|j2                  j.                  |j4                  j.                  cxk(  rt         j                  k(  sJ ‚ J ‚|j4                  j                  «       t        j                  t         j6                  «      j                  kD  sJ ‚|rt9        t'        |dz
  «      «      ng }|j+                  |dz
  g|z  |dz
  g|z  z   «       t;        |j<                  |«       t?        ||«       t?        ||«       y# 1 sw Y   yxY w)a°  Check the automatic index dtype promotion to `np.int64` when needed.

    This ensures that sufficiently large input configurations get
    properly promoted to use `np.int64` for index and indptr representation
    while preserving data integrity. Non-regression test for gh-16803.

    Note that this is only possible for Python runtimes with a 64 bit address
    space. On 32 bit platforms, a `ValueError` is raised instead.
    c                 ód   •— ‰r| |z  |dz  d|z  z   dz  z
  dz
  |z   S | |z  |dz  |z   dz  z
  |z   S )Nr   rG   r2   r6   )rÅ   ÚiÚjr  s      €r%   Údegree_2_calczRtest_csr_polynomial_expansion_index_overflow_non_regression.<locals>.degree_2_calc  sP   ø€ ÙØ�q‘5˜A˜q™D 1 q¡5™L¨QÑ.Ñ.°Ñ2°QÑ6Ð6à�q‘5˜A˜q™D 1™H¨™?Ñ*¨QÑ.Ð.r'   é   iÁÔ r2   r   rï   r   )rk   rð   ©r  rM   rH   r   rY  útThe output that would result from the current configuration would have \d* features which is too large to be indexedr4   NrG   ) r!   Úfloat32r,   Úint64r–   r   Ú_num_combinationsr  rM   ÚiinfoÚintpr½   r7   r8   r9   r:   r.   ÚnonzeroÚintr¿   ÚappendÚextendr  rð   rk   Úindptrr  Úint32Úlistr   Údatar   )r  rM   rR  rv  Ú	n_samplesrW  Ú
data_dtyper†  ÚrowÚcolr/   ÚpfÚnum_combinationsrË   rl   Úrow_nonzeroÚcol_nonzeroÚn_degree_1_features_outÚmax_degree_2_idxÚdata_targetÚcol_nonzero_targetrt  r�   rŒ   Úx_idxÚy_idxÚnnz_per_rowÚrow_nonzero_targets   `                           r%   Ú;test_csr_polynomial_expansion_index_overflow_non_regressionr—  ÷  sV  ø€ ô /ð €IØ€JÜ—‘€JÜ�9‰9�Q˜¤§¡Ô*€DÜ
�(‰(�I ‘M 9¨q¡=°)¸a±-ÀÈQÁÐOÓ
P€Cô �(‰(Ø	�a‰˜ a™¨°a©¸Àa¹ÐHÔPR×PXÑPXô€Cñ 	Ø	��SˆzÐØ˜*Ð%Øô	€Aô
 
Ø)¸ÈQô
€Bð ×+Ñ+ØØØØ×,Ñ,Ø—_‘_ð ,ó Ðð œ"Ÿ(™(¤2§7¡7Ó+×/Ñ/Ò/ð>ð 	ô �]‰]œ:¨SÔ1ñ 	Ø�F‰F�1ŒI÷	àØ×Ñ˜qÓ!€GØ&Ÿ™Ó0Ñ€K�Ø(¨<Ñ7Ðá�j #¤cÐ.>Ð*>Ó&?Ñ"@À#ÀaÁ&ÓIØ
!ñ	"ð ñ ,8�1�#˜ Q™Ò'¸R€KÙ2>˜!˜ 	¨A¡Ò.ÀBÐä�1‹Xó ˆØ��Q‘‰KˆØ��Q‘˜‘‰OˆØ�A˜‘E‘
ˆØ�A˜‘E˜A‘I‘ˆÙØ×Ñ˜qÔ!Ø×%Ñ% aÔ(Ø×Ñ˜A˜q˜6Ô"Ø×!Ñ!Ø”S˜Ó&Ñ&¨´°LÓ0AÑ(AÐBô	
ñ  Ø×Ñ  A¡ q¨1¡u¨a°!©eÐ4Ô5Ø×%Ñ%á! *¨e°UÓ;Ð>UÑUÙ! *¨e°UÓ;Ð>UÑUÙ! *¨e°UÓ;Ð>UÑUðõð ×Ñ  A¡˜wÔ'Ø×%Ñ%Ù˜j¨%°Ó7Ð:QÑQöð/ô6 �lÓ# aÑ'¨!¬cÐ6FÐ2FÓ.GÑ*GÑG€Kà× Ñ Ð$4°qÑ$8Ò8Ð8Ð8Ø�=‰=˜JÒ&Ð&Ð&Ø�=‰=˜YÐ(8¸1Ñ(<Ð=Ò=Ð=Ð=Ø�>‰>×Ñ 7§?¡?×#8Ñ#8ÔD¼B¿H¹HÒDÐDÑDÐDÐDà�?‰?×ÑÓ ¤2§8¡8¬B¯H©HÓ#5×#9Ñ#9Ò9Ð9Ð9á7Cœœe I°¡MÓ2Ô3ÈÐØ×ÑØ	�Q‰ˆ˜+Ñ%¨°Q©¨¸+Ñ(EÑEôô �G—L‘L +Ô.Ü�{Ð$6Ô7Ü�{Ð$6Õ7÷w	àús   Ä1P!Ð!P*zdegree, n_features)r   éÿÿ  )rG   i(	  )rG   r˜  c                 ó@  — dg}|dz
  t        j                  t         j                  «      j                  k  rt         j                  nt         j                  }t        j
                  dg|¬«      }t        j
                  |dz
  g|¬«      }|dz
  t        |«      z   g}	|	j                  ||dz   z  dz  |	d   z   «       |	j                  ||dz   z  |dz   z  dz  |	d   z   «        ||||ff«      }
t        ||| ¬«      }|j                  |d| |j                  |j                  ¬«      }|t        j                  t         j                  «      j                  kD  r8d	}t        j                  t        |¬
«      5  |j!                  |
«       ddd«       y|j#                  |
«      }|t        j                  t         j                  «      j                  kD  rt         j                  nt         j                  }d| dz
  t        | «      z  z   }t        |«      |z   }|j$                  |
j$                  k(  sJ ‚|j&                  d|j(                  fk(  sJ ‚|j*                  j$                  |j,                  j$                  cxk(  r|k(  sJ ‚ J ‚|j.                  |k(  sJ ‚|r|d   t        j0                  d«      k(  sJ ‚t3        |«      D ]$  }|d|	|   f   t        j0                  d«      k(  rŒ$J ‚ ||z  }| dk(  r|d|z   z  }|j(                  |	| dz
     dz   |z
  k(  sJ ‚y# 1 sw Y   yxY w)zšTests known edge-cases to the dtype promotion strategy and custom
    Cython code, including a current bug in the upstream
    `scipy.sparse.hstack`.
    r©   r2   r   rï   r   r’   rx  rY  ry  r4   N©r   r   rG   )r!   r}  r„  r½   r{  r–   r€  r�  r   r|  r  rM   r~  r7   r8   r9   r:   r.   rð   rk   r  rƒ  r  ÚnnzÚapproxr¿   )rH   rW  r  rM   rR  r†  Úindices_dtyper‰  rŠ  Úexpected_indicesr/   r‹  rŒ  rË   rl   Úexpected_dtypeÚnon_bias_termsÚexpected_nnzÚidxÚoffsets                       r%   Ú,test_csr_polynomial_expansion_index_overflowr¤  l  s  € ð4 ˆ5€Dà *¨Q¡´"·(±(¼2¿8¹8Ó2D×2HÑ2HÒ H”B—H’HÌbÏhÉh€MÜ
�(‰(�A�3˜mÔ
,€CÜ
�(‰(�J ‘NÐ#¨=Ô
9€Cð 	�Q‰œ˜\Ó*Ñ*ðÐð ×Ñ˜J¨*°q©.Ñ9¸QÑ>ÐAQÐRSÑATÑTÔUà×ÑØ�j 1‘nÑ%¨°a©Ñ8¸AÑ=Ð@PÐQRÑ@SÑSôñ 	�t˜c 3˜ZÐ(Ó)€AÜ	Ø)¸ÈVô
€Bð ×+Ñ+ØØØØ×,Ñ,Ø—_‘_ð ,ó Ðð œ"Ÿ(™(¤2§7¡7Ó+×/Ñ/Ò/ð>ð 	ô �]‰]œ:¨SÔ1ñ 	Ø�F‰F�1ŒI÷	àà×Ñ˜qÓ!€Gà!1´B·H±H¼R¿X¹XÓ4F×4JÑ4JÒ!J”R—X’XÔPR×PXÑPX€Nà˜& 1™*¬Ð0@Ð,@Ó(AÑAÑA€NÜ�|Ó$ ~Ñ5€LØ�=‰=˜AŸG™GÒ#Ð#Ð#Ø�=‰=˜Q × 5Ñ 5Ð6Ò6Ð6Ð6Ø�>‰>×Ñ 7§?¡?×#8Ñ#8ÔJ¸NÒJÐJÑJÐJÐJØ�;‰;˜,Ò&Ð&Ð&áØ�t‰}¤§¡¨cÓ 2Ò2Ð2Ð2Ü�^Ó$ò GˆØ�qÐ*¨3Ñ/Ð/Ñ0´F·M±MÀ#Ó4FÓFÐFÐFðGð  
Ñ*€FØ�‚{Ø�!�j‘.Ñ ˆØ× Ñ Ð$4°V¸a±ZÑ$@À1Ñ$DÀvÑ$MÒMÐMÑM÷/	àús   Å3LÌLc                 ó¸  — t        j                  t         j                  «      j                  dz  }dg}dg}|dz
  g} ||||ff«      }t	        | |d¬«      }d}	t        j                  t        |	¬«      5  |j                  |«       d d d «       t        j                  t        |	¬«      5  |j                  |«       d d d «       y # 1 sw Y   Œ?xY w# 1 sw Y   y xY w)	Nr   r©   r   r2   r%  rx  ry  r4   )
r!   r}  r{  r½   r   r7   r8   r9   r:   r.   )
r  rM   rR  rW  r†  r‰  rŠ  r/   r‹  rË   s
             r%   Ú0test_csr_polynomial_expansion_too_large_to_indexr¦  Ä  sÏ   € ô —‘œ"Ÿ(™(Ó#×'Ñ'¨1Ñ,€JØˆ5€DØˆ#€CØ˜‰>Ð
€CÙ�t˜c 3˜ZÐ(Ó)€AÜ	Ø)¸ÈVô
€Bð	6ð ô 
�‰”z¨Ô	-ñ Ø
�‰ˆqŒ	÷ä	�‰”z¨Ô	-ñ Ø
×Ñ˜Ô÷ð ÷ð ú÷ð ús   Á4CÂ)CÃCÃCÚsparse_containerc                 ón  — t        j                  d«      }t        dd¬«      }d}t        j                  t
        |¬«      5  |j                  |«       ddd«       t        dd¬«      }d	}t        j                  t
        |¬«      5  |j                  |«       ddd«       | | |«      fD ]s  }t        dd
¬«      }|j                  |«      }t        j                  |«      r|j                  «       }t        |t        j                  |j                  d   df«      «       Œu y# 1 sw Y   ŒÎxY w# 1 sw Y   Œ–xY w)z”Check that PolynomialFeatures raises error when degree=0 and include_bias=False,
    and output a single constant column when include_bias=True
    )r   r   r   Fr-  zWSetting degree to zero and include_bias to False would result in an empty output array.r4   Nrš  zoSetting both min_degree and max_degree to zero and include_bias to False would result in an empty output array.Tr2   )r!   Úonesr   r7   r8   r9   r.   r   rß   rá   r   rk   )r§  r/   rC  r=   Ú_XÚoutputs         r%   Ú1test_polynomial_features_behaviour_on_zero_degreer¬  Ü  s  € ô
 	�‰�Ó€AÜ Q°UÔ;€Dð	"ð ô 
�‰”z¨Ô	1ñ Ø×Ñ˜1Ô÷ô  V¸%Ô@€Dð	8ð ô 
�‰”z¨Ô	1ñ Ø×Ñ˜1Ô÷ð Ñ" 1Ó%Ð&ò =ˆÜ!¨¸Ô>ˆØ×#Ñ# BÓ'ˆä�?‰?˜6Ô"Ø—^‘^Ó%ˆFÜ˜6¤2§7¡7¨A¯G©G°A©J¸¨?Ó#;Õ<ñ=÷ð ú÷ð ús   Á DÂD+ÄD(Ä+D4c                  óž   — t         j                  dk(  s&t         j                  dk  rt         j                  dk7  rd} nd} t        «       | k(  sJ ‚y )NÚwin32ì        Ú
emscriptenr‘   é   )ÚsysÚplatformÚmaxsizer   )Úexpected_sizes    r%   Útest_sizeof_LARGEST_INT_tr¶  û  sB   € ô ‡|�|�wÒÜ�‰�uÒ¤§¡°Ò!=à‰àˆä$Ó&¨-Ò7Ð7Ñ7r'   r®  zyOn Windows, scikit-learn is typically compiled with MSVC that does not support int128 arithmetic (at the time of writing))ÚreasonÚrunc                 ó¸  — t        t        j                  t        j                  «      j                  dz  dz   «      }dg}dg}|dz
  g}|dz
  g}|j                  t        ||dz   z  dz  |d   z   «      «       |j                  t        ||dz   z  |dz   z  dz  |d   z   «      «        | |||ff«      }t        ddd¬	«      }t        j                  d
k  r8d}t        j                  t        |¬«      5  |j                  |«       d d d «       y |j                  |«      }	t        d«      D ]$  }
|	d||
   f   t        j                  d«      k(  rŒ$J ‚ y # 1 sw Y   y xY w)NgUUUUUUÕ?rG   r©   r   r2   r   r’   Frx  r¯  ry  r4   )r€  r!   r}  r{  r½   r�  r   r²  r´  r7   r8   r9   r.   r¿   rœ  )rR  rW  r†  r‰  rŠ  rž  r/   r‹  rË   rl   r¢  s              r%   Ú*test_csr_polynomial_expansion_windows_failrº  	  s�  € ô ”R—X‘XœbŸh™hÓ'×+Ñ+°Ñ6¸Ñ:Ó;€JØˆ5€DØˆ#€CØ˜‰>Ð
€Cð 	�Q‰ðÐð ×ÑÜˆJ˜* q™.Ñ)¨QÑ.Ð1AÀ!Ñ1DÑDÓEôð ×ÑÜˆJ˜* q™.Ñ)¨Z¸!©^Ñ<ÀÑAÐDTÐUVÑDWÑWÓXôñ 	�t˜c 3˜ZÐ(Ó)€AÜ	¨UÀÈqÔ	Q€BÜ
‡{�{�eÒð:ð 	ô
 �]‰]œ:¨SÔ1ñ 	 Ø×Ñ˜QÔ÷	 ð 	 ð ×"Ñ" 1Ó%ˆÜ˜“8ò 	KˆCØ˜1Ð.¨sÑ3Ð3Ñ4¼¿¹ÀcÓ8JÓJÐJÐJñ	K÷		 ð 	 ús   Ã1EÅEz(array_namespace, device_name, dtype_name)r   r%  rG   r(  c                 ó`  — t        |||«      \  }}| \  }	}
|	j                  |«      }|j                  ||¬«      }t        d¬«      5  t	        |||¬«      j                  |«      }t	        |||¬«      j                  |«      }|j                  |«      }|j                  |«      }t        t        |t        d¬«      |«       t        |«      d   j                  |j                  k(  sJ ‚t        |«      t        |«      k(  sJ ‚|j                  |j                  k(  sJ ‚	 ddd«       y# 1 sw Y   yxY w)	zNTest array API compliance for PolynomialFeatures on 2 features up to degree 3.r   T©Úarray_api_dispatchr  Úcpu)Úxpr   r   N)r   rM  Úasarrayr   r   r:   rj   r   r   r!   r   Ú__name__Úarray_api_devicerð   )r$  rH   rM   r  Úarray_namespaceÚdevice_nameÚ
dtype_namer¿  r   r/   rI   ÚX_npÚX_xpÚtf_npÚtf_xpÚout_npÚout_xps                    r%   Ú-test_polynomial_features_array_api_compliancerÌ  7  s  € ô" & o°{ÀJÓO�J€BˆØ�D€A€qØ�8‰8�JÓ€DØ�:‰:�d 6ˆ:Ó*€DÜ	¨4Ô	0ñ *Ü"Ø¨ÐGWô
ç
‰#ˆd‹)ð 	ô #Ø¨ÐGWô
ç
‰#ˆd‹)ð 	ð —‘ Ó&ˆØ—‘ Ó&ˆÜœ ¬2°eÔ<¸fÔEÜ˜VÓ$ QÑ'×0Ñ0°B·K±KÒ?Ð?Ð?Ü Ó'Ô+;¸DÓ+AÒAÐAÐAØ�|‰|˜tŸz™zÒ)Ð)Ñ)÷*÷ *ñ *ús   ÁCD$Ä$D-c                 óè  — t        | ||«      \  }}t        j                  d«      j                  d«      j	                  |«      }|j                  ||¬«      }d}t        d¬«      5  t        d¬«      j                  |«      }t        |«      r|j                  |«       n5t        j                  t        |¬	«      5  |j                  |«       d
d
d
«       d
d
d
«       y
# 1 sw Y   ŒxY w# 1 sw Y   y
xY w)zkTest that PolynomialFeatures with order='F' raises ValueError on
    array API namespaces other than numpy.r’   r  r   zBPolynomialFeatures does not support order='F' for non-numpy arraysTr¼  r+   r)   r4   N)r   r!   r,   r-   rM  rÀ  r   r   r:   r   rj   r7   r8   r9   )	rÃ  rÄ  rÅ  r¿  r   r/   rÇ  rË   r‹  s	            r%   Ú4test_polynomial_features_array_api_raises_on_order_FrÎ  \  sÊ   € ô & o°{ÀJÓO�J€BˆÜ
�	‰	�!‹×Ñ˜VÓ$×+Ñ+¨JÓ7€AØ�:‰:�a ˆ:Ó'€DØ
N€CÜ	¨4Ô	0ñ #Ü cÔ*×.Ñ.¨tÓ4ˆÜ˜rÔ"Ø�L‰L˜Õä—‘œz°Ô5ñ #Ø—‘˜TÔ"÷#÷#ð #÷
#ð #ú÷#ð #ús%   Á%AC(Â9CÃC(ÃC%	Ã!C(Ã(C1)ar÷   r²  Únumpyr!   r7   Únumpy.testingr   r   Úscipyr   Úscipy.interpolater   Úscipy.sparser   re  Úsklearn._configr   Úsklearn.linear_modelr	   Úsklearn.pipeliner
   Úsklearn.preprocessingr   r   r   Ú/sklearn.preprocessing._csr_polynomial_expansionr   Úsklearn.utils._array_apir   r   r   r   r   rÂ  Úsklearn.utils._maskr   Úsklearn.utils._testingr   r   r   Úsklearn.utils.fixesr   r   ÚmarkÚparametrizer0   r>   rJ   rd   rm   r¿   ry   rŽ   r–   r™   r¥   r±   r»   rÆ   rÌ   rÚ   rë   rí   r  r
  r  Úfixturer  Úslicer   r$  r*  rD  r€  rz  rô   rQ  rV  r_  rf  rl  rn  rq  r—  Úsqrtr}  r{  r½   r¤  r¦  r¬  r¶  Úxfailr³  rº  rÌ  rÎ  r6   r'   r%   ú<module>rã     sâ  ðÛ 	Û 
ã Û ß =Ý Ý %Ý 0å *Ý 1Ý %÷ñ õ
÷ó õõ *÷ñ ÷
ð ‡�×Ñ˜Ð!3Ð5FÐ GÓHñ	9ó Ið	9ð ‡�×ÑØà
�Q�C�5Ð	ÐNÐOØ
�Q˜�F˜Q ˜FÐ#Ð	$Ð&SÐTØ
�Q�C˜!˜�:Ð	Ð JÐKðóñ+óð+ð ‡�×Ñ˜¨:°zÐ*BÓCñó Dðò#ðL ‡�×ÑØÚ2óð ‡�×Ñ˜ A q 6Ó*ñ2ó +ó	ð
2ð ‡�×Ñ˜¡5¨¨A£;Ó/Ø‡�×Ñ˜¡E¨!¨Q£KÓ0Ø‡�×Ñ˜ 9¨jÐ"9Ó:Ø‡�×Ñ˜¨:°zÐ*BÓCñ>ó Dó ;ó 1ó 0ð>ð2 ‡�×Ñ˜& +Ð.°ÀÐ0NÓOñ3ó Pð3ð, ‡�×ÑÚ;à	�A�t˜X˜RŸX™X¨¨1 v°°1¨v¸¸2°wÐ&?Ó@ÐAàØØˆB�H‰HÒ*Ó+ØˆB�H‰H�q˜!�f˜q !˜f q¨" gÐ.Ó/ð		
ð 
�A�t˜X˜RŸX™X¨¨1 v°°1¨v¸¸2°wÀÀBÀÐ&HÓIÐJØ	�Q˜˜h˜bŸh™h¨¨A¨°°A°¸¸B¸Ð'@ÓAÐBàØØˆB�H‰HÒ*Ó+ØˆB�H‰H�q˜!�f˜q !˜f q¨" gÐ.Ó/ð		
ðóñ(0ó)ð(0ð ‡�×Ñ˜& +Ð.°ÀÐ0NÓOñIó PðIò>ò$4ð, ‡�×Ñ˜ A q 6Ó*ñ#"ó +ð#"ðL ‡�×Ñ˜& +Ð.°ÀÐ0NÓOØ‡�×Ñ˜¢?Ó3ñ3ó 4ó Pð3òl0ð2 ‡�×Ñ˜¡5¨¨A£;Ó/Ø‡�×Ñ˜ 9¨jÐ"9Ó:Ø‡�×ÑØÒLóð ‡�×Ñ˜¨%°¨Ó7ñ-
ó 8óó ;ó 0ð-
ð` ‡�×Ñ˜ Q¨ GÓ,Ø‡�×Ñ˜¨$°¨Ó7Ø‡�×Ñ˜ A q 6Ó*Ø‡�×ÑØÒLóð ‡�×Ñ˜¨5°$¨-Ó8ñ>ó 9óó +ó 8ó -ð>ð" ‡�×ÑØÒLóð ‡�×Ñ˜¨5°$¨-Ó8ñFó 9óðFðR ‡�×ÑØÒLóð ‡�×Ñ˜¨5°$¨-Ó8ñEó 9óðEð, ‡�×ÑØà
�GÐ	ÐGÐHØ
�HÐ	ÐHÐIØ
�FÐ	ÐFÐGØ
�IÐ	Ð JÐKð	óñ,óð,ð €‡�Óñó ðð ‡�×ÑØ5à	
ˆD�%™˜t TÓ*Ð+Ø	
ˆE�5™%  4›.Ð)Ø	
ˆD�$˜˜A˜ÐØ	
ˆE�4˜!˜ÐØ	��ušiÐ(Ø	�˜  1˜vÐ&Ø	��t˜a˜SÐ!Ø	�˜˜bÐ!ð	óð ‡�×Ñ˜¨¨°Ñ(?À.Ñ(PÓQñNó RóðNð. €‡�Óñó ðð* ‡�×ÑØ5à	
ˆD�%™˜q !›Ð%Ø	
ˆE�5™%  1›+Ð&Ø	
ˆD�$šÐ%Ø	
ˆE�4šÐ#Ø	��ušlÐ+Ø	�˜šyÐ)Ø	��t˜a ˜VÐ$Ø	�˜˜q˜cÐ"Ø	
ˆD�%™˜t TÓ*Ð+Ø	
ˆE�5™%  4›.Ð)Ø	
ˆD�$šÐ%Ø	
ˆE�4šÐ#Ø	��uÒ6Ð7Ø	�˜™u Q¨›~Ð.Ø	��t˜a ˜VÐ$Ø	�˜˜q˜cÐ"Ø	��ušoÐ.Ø	�˜š|Ð,Ø	��t˜a˜SÐ!Ø	�˜˜bÐ!ð)óð2 ‡�×Ñ˜¨¨°Ñ(?À.Ñ(PÓQñNó Ró3ð4Nò.IOðX ‡�×ÑÚ8à	
ˆD�%˜ÐØ	
ˆD�%˜ÐØ	
ˆD�%˜Ÿ™Ð$Ø	
ˆD�%˜Ÿ™Ð$Ø	
ˆE�5˜"Ÿ*™*Ð%Ø	
ˆE�4˜Ÿ™Ð$Ø	
ˆE�5˜"Ÿ*™*Ð%Ø	
ˆE�4˜Ÿ™Ð$ð	óð ‡�×Ñ˜¨.Ó9ñ:ó :óð:ð$ ‡�×ÑÚ8à	
ˆD�%˜ÐØ	
ˆD�%˜ÐØ	
ˆD�%˜Ÿ™Ð$Ø	
ˆD�%˜Ÿ™Ð$Ø	
ˆE�5˜"Ÿ*™*Ð%Ø	
ˆE�4˜Ÿ™Ð$ðó
ð ‡�×Ñ˜¨.Ó9ñ:ó :ó
ð:ð$ ‡�×Ñ˜¢yÓ1Ø‡�×ÑØÒFóð ‡�×ÑÐ+¨d°E¨]Ó;Ø‡�×Ñ˜¨$°¨Ó7Ø‡�×Ñ˜¨.Ó9ñ2ó :ó 8ó <óó 2ð2ð2 ‡�×ÑÚ8à	
ˆD�%˜Ÿ™Ð$Ø	
ˆD�%˜Ÿ™Ð$Ø	
ˆE�5˜"Ÿ*™*Ð%Ø	
ˆE�4˜Ÿ™Ð$ð	óð ‡�×Ñ˜¨.Ó9ñ:ó :óð:ð" ‡�×ÑÚ1òóð" ‡�×Ñ˜¨.Ó9ñ:ó :ó#ð$:ð$ ‡�×ÑØÐ'Ð(Ú@óð ‡�×Ñ˜¨.Ó9ñ:ó :ó	ð
:ð" ‡�×ÑÚ&òóð ‡�×Ñ˜¨.Ó9ñ:ó :óð :ð" ‡�×ÑÐ+¨d°E¨]Ó;Ø‡�×Ñ˜¨$°¨Ó7Ø‡�×Ñ˜¨.Ó9ño8ó :ó 8ó <ðo8ðd ‡�×ÑØð 	Øð 
‰C��—‘˜˜Ÿ™ §¡Ó*×.Ñ.Ó/°!Ñ3Ó4Ð5Øð 
‰C��—‘˜˜Ÿ™ §¡Ó*×.Ñ.Ó/Ó0Ð1ðóð  ‡�×ÑÐ+¨d°E¨]Ó;Ø‡�×Ñ˜¨$°¨Ó7Ø‡�×Ñ˜¨.Ó9ñBNó :ó 8ó <ó!ð&BNðJ ‡�×ÑÐ+¨d°E¨]Ó;Ø‡�×Ñ˜¨$°¨Ó7Ø‡�×Ñ˜¨.Ó9ñó :ó 8ó <ðð* ‡�×ÑÐ+¨^¸nÑ-LÓMñ=ó Nð=ò<8ð ‡�×ÑØ‡L�L�GÑð	6ð 	ð ó ð ‡�×Ñ˜¨.Ó9ñ"Kó :óð"KðJ ‡�×ÑØ.Ù-Ó/óð ‡�×ÑÐ+¨d°E¨]Ó;Ø‡�×Ñ˜¨$°¨Ó7Ø‡�×Ñ˜Ò#9Ó:ñ*ó ;ó 8ó <ó	ð*ð< ‡�×ÑØ.Ù-Ó/óñ#ó	ñ#r'   