§
    ¨éUg«¥  ã                   ó¦  — d dl Z d dlZd dlZd dlmZmZ d dlmZ d dl	m
Z
 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mZmZ d d
lmZ d dlmZmZmZm Z  ej!         "                    deef¦  «        d„ ¦   «         Z#ej!         "                    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j!         "                    dddg¦  «        d„ ¦   «         Z%d„ Z&ej!         "                    dg d¢¦  «        ej!         "                    dddg¦  «        d„ ¦   «         ¦   «         Z'ej!         "                    d e(dd¦  «        ¦  «        ej!         "                    d  e(dd¦  «        ¦  «        ej!         "                    dd!d"g¦  «        ej!         "                    dd#dg¦  «        d$„ ¦   «         ¦   «         ¦   «         ¦   «         Z)ej!         "                    d%d&gd'd(g¦  «        d)„ ¦   «         Z*ej!         "                    g d*¢d!dd ej+        d dgdd+gd,d-gg¦  «        fd!d ej+        g d.¢¦  «         ej+        ddgd/d+gd,d-gg¦  «        fd!d/d ej+        d dgdd,gd/d0gd,d-gg¦  «        fd"dd ej+        d dgddgd,d-gg¦  «        fd"d ej+        g d.¢¦  «         ej+        ddgdd+gd,d-gg¦  «        fg¦  «        d1„ ¦   «         Z,ej!         "                    d%d&gd'd(g¦  «        d2„ ¦   «         Z-d3„ Z.d4„ Z/ej!         "                    dddg¦  «        d5„ ¦   «         Z0ej!         "                    d%d&gd'd(g¦  «        ej!         "                    dg d6¢¦  «        d7„ ¦   «         ¦   «         Z1d8„ Z2ej!         3                    e  ed9¦  «        k     d:¬;¦  «        ej!         "                    d e(dd¦  «        ¦  «        ej!         "                    dd!d"g¦  «        ej!         "                    dg d<¢¦  «        ej!         "                    d=d>d?g¦  «        d@„ ¦   «         ¦   «         ¦   «         ¦   «         ¦   «         Z4ej!         3                    e  ed9¦  «        k    d:¬;¦  «        dA„ ¦   «         Z5ej!         "                    d dd0g¦  «        ej!         "                    d=d?d>g¦  «        ej!         "                    ddd/g¦  «        ej!         "                    dg d<¢¦  «        ej!         "                    dBd>d?g¦  «        dC„ ¦   «         ¦   «         ¦   «         ¦   «         ¦   «         Z6ej!         "                    dddDidEfddFidEfddGidEfddHidIfg¦  «        dJ„ ¦   «         Z7 ej8        ¦   «         dK„ ¦   «         Z9ej!         "                    dLdd?d> e:dd¦  «        fdd>d> e:dd¦  «        fdd?d?d dgfdd>d?dgfdMd?d>g dN¢fdMd>d>ddgfdMd?d?d gfdMd>d?g fg¦  «        ej!         "                    dOdgez   ez   ¦  «        dP„ ¦   «         ¦   «         Z; ej8        ¦   «         dQ„ ¦   «         Z<ej!         "                    dLdd?d> e:d d,¦  «        fdd>d> e:dd,¦  «        fdd?d?g dR¢fdd>d?g dS¢fdTd?d>g dU¢fdTd>d>g dV¢fdTd?d?d d/gfdTd>d?d/gfdd?d> e:dd¦  «        fdd>d> e:dd¦  «        fdd?d?g dR¢fdd>d?g dS¢fdMd?d>g dW¢fdMd>d> e:dd¦  «        fdMd?d?d d/gfdMd>d?d/gfdXd?d>g dY¢fdXd>d>g dZ¢fdXd?d?d gfdXd>d?g fg¦  «        ej!         "                    dOdgez   ez   ¦  «        d[„ ¦   «         ¦   «         Z=d\„ Z>ej!         "                    g d]¢dd?d>e?fdd?d>e?fdd?d>ej@        fdd?d>ejA        fdd>d>ejA        fdd>d?ejA        fd/d>d>ejA        fd/d>d?ejA        fg¦  «        ej!         "                    d^e¦  «        d_„ ¦   «         ¦   «         ZBej!         "                    g d]¢dd?d>e?fdd?d>e?fdd?d>ej@        fdd?d>ejA        fdd>d>ejA        fdd>d?ejA        fg¦  «        ej!         "                    d`e¦  «        da„ ¦   «         ¦   «         ZCej!         "                    dbg dc¢¦  «        ej!         "                    ddg de¢¦  «        ej!         "                    dfd?d>g¦  «        ej!         "                    d=d?d>g¦  «        ej!         "                    d`e¦  «        dg„ ¦   «         ¦   «         ¦   «         ¦   «         ¦   «         ZDej!         "                    g d]¢dd?d>ej@        fdd?d>ejA        fdd>d>ejA        fdd>d?ejA        fg¦  «        ej!         "                    d`e¦  «        dh„ ¦   «         ¦   «         ZEej!         "                    g di¢g dj¢¦  «        ej!         "                    d`e¦  «        dk„ ¦   «         ¦   «         ZFej!         "                    d=dfgg dl¢¦  «        ej!         "                    d`e¦  «        dm„ ¦   «         ¦   «         ZGej!         "                    g dn¢g do¢¦  «        ej!         "                    d`e¦  «        dp„ ¦   «         ¦   «         ZHej!         "                    dfd?d>g¦  «        ej!         "                    d=d?d>g¦  «        ej!         "                    d`e¦  «        dq„ ¦   «         ¦   «         ¦   «         ZIej!         "                    drdsdtd e? ejJ         ejK        ejL        ¦  «        jM        ¦  «        dz   ¦  «        fdud e? ejJ         ejK        ejL        ¦  «        jM        ¦  «        ¦  «        fg¦  «        ej!         "                    dfd?d>g¦  «        ej!         "                    d=d?d>g¦  «        ej!         "                    d`e¦  «        dv„ ¦   «         ¦   «         ¦   «         ¦   «         ZNej!         "                    dfd?d>g¦  «        ej!         "                    d=d?d>g¦  «        ej!         "                    d`e¦  «        dw„ ¦   «         ¦   «         ¦   «         ZOej!         "                    dxeez   ¦  «        dy„ ¦   «         ZPdz„ ZQej!         R                    e jS        d{k    d|d?¬}¦  «        ej!         "                    d`e¦  «        d~„ ¦   «         ¦   «         ZTdS )é    N)Úassert_allcloseÚassert_array_equal)Úsparse)ÚBSpline)Úrandom)ÚLinearRegression)ÚPipeline)ÚKBinsDiscretizerÚPolynomialFeaturesÚSplineTransformer)Ú_calc_expanded_nnzÚ_calc_total_nnzÚ_get_sizeof_LARGEST_INT_t)Úassert_array_almost_equal)ÚCSC_CONTAINERSÚCSR_CONTAINERSÚparse_versionÚ
sp_versionÚestc                 óf  — t          j        d¦  «                             dd¦  «        }d„ } | | ¦   «                              |¦  «        ¦  «        sJ ‚ | | d¬¦  «                             |¦  «        ¦  «        sJ ‚t          j         | d¬¦  «                             |¦  «        ¦  «        sJ ‚dS )	z+Test that output array has the given order.é
   é   é   c                 ó4   — t          j        | j        ¦  «        S )N)ÚnpÚ	isfortranÚT)Úas    új/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/sklearn/preprocessing/tests/test_polynomial.pyÚis_c_contiguousz?test_polynomial_and_spline_array_order.<locals>.is_c_contiguous$   s   € ÝŒ|˜AœCÑ Ô Ð ó    ÚC)ÚorderÚFN)r   ÚarangeÚreshapeÚfit_transformr   )r   ÚXr    s      r   Ú&test_polynomial_and_spline_array_orderr)      s¾   € õ 	Œ	�"‰Œ×Ò˜a Ñ#Ô#€Að!ð !ð !ð ˆ?˜3˜3™5œ5×.Ò.¨qÑ1Ô1Ñ2Ô2Ð2Ð2Ð2Øˆ?˜3˜3 S˜>™>œ>×7Ò7¸Ñ:Ô:Ñ;Ô;Ð;Ð;Ð;ÝŒ<˜˜ #˜™œ×4Ò4°QÑ7Ô7Ñ8Ô8Ð8Ð8Ð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 | ¤Ž                     |¦  «         ddd¦  «         dS # 1 swxY w Y   dS )zATest that we raise errors for invalid input in SplineTransformer.r+   r   ©ÚmatchN© ©ÚpytestÚraisesÚ
ValueErrorr   Úfit©ÚparamsÚerr_msgr(   s      r   Ú(test_spline_transformer_input_validationr8   ,   s¬   € ð ˆˆqˆcˆ
€Aå	Œ•z¨Ð	1Ñ	1Ô	1ð +ð +ÝÐ#Ð#˜FÐ#Ð#×'Ò'¨Ñ*Ô*Ð*ð+ð +ð +ñ +ô +ð +ð +ð +ð +ð +ð +ð +øøøð +ð +ð +ð +ð +ð +ó   ¢ AÁAÁAÚextrapolationÚcontinueÚperiodicc                 óÂ   — t          j        d¦  «                             dd¦  «        }ddgddgddgddgddgg}t          d	|| ¬
¦  «                             |¦  «        }dS )zATest that SplineTransformer accepts integer value knot positions.é   r   r   r   r+   r   é   é   é   )Údegreer*   r:   N)r   r%   r&   r   r'   )r:   r(   r*   Ú_s       r   Ú%test_spline_transformer_integer_knotsrD   <   st   € õ 	Œ	�"‰Œ×Ò˜b !Ñ$Ô$€AØ�ˆV�a˜�V˜a ˜V b¨" X°°B¨xÐ8€EÝØ˜¨]ð	ñ 	ô 	ç‚m�AÑÔð €A€Ar!   c                  óˆ  — t          j        d¦  «                             dd¦  «        } t          ddd¬¦  «                             | ¦  «        }|                     ¦   «         }t          |g d¢¦  «         t          ddd¬¦  «                             | ¦  «        }|                     d	d
g¦  «        }t          |g d¢¦  «         dS )z<Test that SplineTransformer generates correct features name.r>   r   r   rA   T)Ún_knotsrB   Ú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   r4   Úget_feature_names_outr   )r(   ÚspltÚfeature_namess      r   Ú%test_spline_transformer_feature_namesr^   F   sß   € å
Œ	�"‰Œ×Ò˜b !Ñ$Ô$€AÝ Q¨q¸tÐDÑDÔD×HÒHÈÑKÔK€DØ×.Ò.Ñ0Ô0€MÝØð	
ð 	
ð 	
ñô ð õ   Q¨q¸uÐEÑEÔE×IÒIÈ!ÑLÔL€DØ×.Ò.°°S¨zÑ:Ô:€MÝØð		
ð 		
ð 		
ñô ð ð ð r!   )ÚconstantÚlinearr;   r<   rB   rA   c                 ój  — t          j        d¦  «                             dd¦  «        }t          || ¬¦  «                             |¦  «        }|                     ddg¦  «        }t          |¦  «        |j        k    sJ ‚|                     |¦  «        }|j	        d         t          |¦  «        k    sJ ‚dS )	zsTest feature names are correct for different extrapolations and degree.

    Non-regression test for gh-25292.
    r>   r   r   )rB   r:   r   rR   r+   N)
r   r%   r&   r   r4   r[   ÚlenÚn_features_out_Ú	transformÚshape)r:   rB   r(   r\   r]   ÚX_transs         r   Ú7test_split_transform_feature_names_extrapolation_degreerg   l   s«   € õ 	Œ	�"‰Œ×Ò˜b !Ñ$Ô$€AÝ F¸-ÐHÑHÔH×LÒLÈQÑOÔO€DØ×.Ò.°°S¨zÑ:Ô:€MÝˆ}ÑÔ Ô!5Ò5Ð5Ð5Ð5à�nŠn˜QÑÔ€GØŒ=˜Ô�s =Ñ1Ô1Ò1Ð1Ð1Ð1Ð1Ð1r!   r   rF   ÚuniformÚquantiler_   c                 ó”  — 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|¬¦  «        }|                     |¦  «         ||fD ]9}t          t          j        |                     |¦  «        d¬	¦  «        d¦  «         Œ:dS )
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   r+   éd   Nr   r<   T)rF   rB   r*   rG   r:   ©Úaxis)r   ÚlinspaceÚr_r   r4   r   Úsumrd   )rB   rF   r*   r:   r(   ÚX_trainÚX_testr\   s           r   Ú+test_spline_transformer_unity_decompositionrs      s   € õ 	Œ�A�q˜#ÑÔ˜q˜q˜q $˜wÔ'€AåŒe�a�S�E˜1˜S˜S˜q˜S ! ! !˜Vœ9¨ s eÐ+Ô,€GØˆqˆt�!ˆt�Q�Q�QˆwŒZ€Fà˜
Ò"Ð"Ø˜FÑ"ˆåØØØØØ#ðñ ô €Dð 	‡H‚HˆWÑÔÐØ�vÐð >ð >ˆÝ�œ˜tŸ~š~¨aÑ0Ô0°qÐ9Ñ9Ô9¸1Ñ=Ô=Ð=Ð=ð>ð >r!   ÚbiasÚ	intercept©TF©FTc           	      óh  — 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¬¦  «        }|                     ||¦  «         t          |                     |¦  «        |d¬¦  «         dS )z7Test that B-splines fit a sinusodial curve pretty well.r   r   rk   Nr   Úsplineé   rA   r_   ©rF   rB   rG   r:   Úols©Úfit_intercept©Ústepsçü©ñÒMbP?©Úrtol)	r   rn   Úsinr	   r   r   r4   r   Úpredict)rt   ru   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„N€NÝ�D—L’L ‘O”O Q¨TÐ2Ñ2Ô2Ð2Ð2Ð2r!   )r*   rF   Úsample_weightÚexpected_knotsé   é   é   )r   r   r+   r+   r   rA   r+   é   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	          ||¦  «         d
S )zJCheck the behaviour to find knot positions with and without sample_weight.r   r   rA   rŽ   rŒ   r   r‹   r�   )r(   r*   rF   r‰   N)r   Úarrayr   Ú_get_base_knot_positionsr   )r*   rF   r‰   rŠ   r(   Ú
base_knotss         r   Ú/test_spline_transformer_get_base_knot_positionsr“   ³   sv   € õ0 	Œ�1�a�&˜1˜a˜& 1 a &¨1¨a¨&°1°a°&¸1¸a¸&À1ÀbÀ'ÐJÑKÔ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¬¦  «        }|                     | ||dd…df         ¦  «        ¦  «         t          j        ddd¦  «        dd…df         }|                     |¦  «        }t          | ||dd…df         ¦  «        dd¬¦  «         t          |dd…         |dd…         d¬¦  «         dS )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‹   rA   )r   r„   Úpi)Úxs    r   Úfz=test_spline_transformer_periodic_linear_regression.<locals>.f×   s:   € ÝŒv�a�"œ%‘i !‘mÑ$Ô$¥r¤v¨aµ"´%©i¸!©mÑ'<Ô'<Ñ<¸qÑ@Ð@r!   r   r+   ée   Nry   r>   rA   r<   r{   r|   r}   r   éÿÿÿÿr   i-  g{®Gáz„?)Úatolrƒ   rk   éÈ   r�   r‚   )r   rn   r	   r   r   r4   r…   r   )rt   ru   r˜   r(   r‡   ÚX_Úpredictionss          r   Ú2test_spline_transformer_periodic_linear_regressionrŸ   Ò   sB  € ð
Að Að Aõ 	Œ�A�q˜#ÑÔ˜q˜q˜q $˜wÔ'€AÝð Ý!ØØØ!%Ø",ð	ñ ô ðð Õ$°9Ð=Ñ=Ô=Ð>ð
ðñ ô €Dð 	‡H‚HˆQ���!�A�A�A�q�D”'‘
”
ÑÔÐõ 
Œ�R˜˜CÑ	 Ô	     D Ô	)€BØ—,’,˜rÑ"Ô"€KÝ�K   2 a a a¨ d¤8¡¤°4¸dÐCÑCÔCÐCÝ�K  # Ô&¨°C¸°GÔ(<À4ÐHÑHÔHÐHÐHÐHr!   c                  óx  — t          j        ddd¦  «        dd…df         } d}t          |ddgdgd	gg¬
¦  «        }|                     | ¦  «        }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          ||¦  «         dS )z@Test that the backport of extrapolate="periodic" works correctlyéþÿÿÿg      @r   Nr   r<   g      ð¿ç        ç      ð?©rB   r:   r*   éýÿÿÿrŽ   r   )r   rn   r   r'   r�   r   r%   r   )r(   rB   Ú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�c˜3�Z # s ¨c°3¨Z¸#¸s¸ÐDÑEÔE€DÝ
•"”)˜B Ñ"Ô" D¨&°*Ñ
=Ô
=€CØˆ3ˆq����A�Œw‰<Œ<€DÝ�B˜ÑÔÐÐÐr!   c            
      óJ  — 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¬¦  «        }|                     | ¦  «        }|                     | ¦  «        }t	          ||dd…g d¢f         ¦  «         dS )zJTest if shifted knots result in the same transformation up to permutation.r   r   r™   NrA   r<   r¢   r£   ç      @ç      @ç      @ç       @r¤   g      "@)rŽ   r   r+   r   rA   )r   rn   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˜q˜q / / /Ð1Ô2Ñ3Ô3Ð3Ð3Ð3r!   c           
      ój  — t          j        ddd¦  «        dd…df         }t          | ddgdgdgd	gd
gdgg¬¦  «        }|                     |¦  «        }|                     ¦   «         |                     ¦   «         z
  t          |¦  «        z  }d|z  }|}t          d| dz   ¦  «        D ]I}t          j        |d¬¦  «        }t          j	        |¦  «                             ¦   «         |k     sJ ‚||z  }ŒJt          j        |d¬¦  «        }t          j	        |¦  «                             ¦   «         dk    sJ ‚dS )z?Test that spline transformation is smooth at first / last knot.r¡   r   i'  Nr<   r¢   r£   r­   r®   r¯   r°   r¤   r+   r   rl   )
r   rn   r   r'   ÚmaxÚminrb   ÚrangeÚdiffÚabs)	rB   r(   r¦   r§   ÚdeltaÚtolÚdXtÚdrº   s	            r   Ú3test_spline_transformer_periodic_splines_smoothnessrÀ     sF  € õ 	Œ�B˜˜FÑ#Ô# A A A t GÔ,€Aå#ØØ Øˆu�s�e˜c˜U S E¨C¨5°3°%Ð8ðñ ô €Kð
 
×	"Ò	" 1Ñ	%Ô	%€Bà�UŠU‰WŒW�q—u’u‘w”wÑ¥# a¡&¤&Ñ(€EØ
ˆu‰*€Cà
€Cõ �1�f˜q‘jÑ!Ô!ð ð ˆåŒw�s Ð#Ñ#Ô#ˆÝŒv�d‰|Œ|×ÒÑ!Ô! CÒ'Ð'Ð'Ð'à�U‰lˆˆõ
 Œ7�3˜QÐÑÔ€DÝŒ6�$‰<Œ<×ÒÑÔ Ò!Ð!Ð!Ð!Ð!Ð!r!   )r+   r   rA   rŽ   r   c           	      ó¸  — t          j        ddd¦  «        dd…df         }|                     ¦   «         }t          dt	          d|| d¬¦  «        gd	t          |¬
¦  «        gg¦  «        }|                     ||¦  «         t          |                     dgdgg¦  «        ddg¦  «         t          dt	          d|| d¬¦  «        gd	t          |¬
¦  «        gg¦  «        }|                     ||¦  «         t          |                     dgdgg¦  «        ddg¦  «         t	          d|| d¬¦  «        }|                     |¦  «         d}t          j
        t          |¬¦  «        5  |                     dgg¦  «         ddd¦  «         n# 1 swxY w Y   t          j
        t          |¬¦  «        5  |                     dgg¦  «         ddd¦  «         dS # 1 swxY w Y   dS )z1Test that B-spline extrapolation works correctly.rš   r+   rk   Nry   rŽ   r_   r{   r|   r}   iöÿÿÿr   r`   Úerrorú0X contains values beyond the limits of the knotsr-   )r   rn   Úsqueezer	   r   r   r4   r   r…   r1   r2   r3   rd   )rt   ru   rB   r(   r†   r‡   r\   Úmsgs           r   Ú%test_spline_transformer_extrapolationrÆ   A  s“  € õ
 	Œ�B˜˜3ÑÔ    4 Ô(€AØ	�	Š	‰Œ€Aõ ð Ý!ØØ!Ø!%Ø",ð	ñ ô ðð Õ$°9Ð=Ñ=Ô=Ð>ð	
ñô €Dð 	‡H‚HˆQ��N„N€NÝ�D—L’L 3 %¨!¨ Ñ.Ô.°°Q°Ñ8Ô8Ð8õ ð Ý!ØØ!Ø!%Ø"*ð	ñ ô ðð Õ$°9Ð=Ñ=Ô=Ð>ð	
ñô €Dð 	‡H‚HˆQ��N„N€NÝ�D—L’L 3 %¨!¨ Ñ.Ô.°°a°Ñ9Ô9Ð9õ Ø˜&¨tÀ7ðñ ô €Dð 	‡H‚HˆQ�K„K€KØ
<€CÝ	Œ•z¨Ð	-Ñ	-Ô	-ð  ð  Ø�Š˜˜�wÑÔÐð ð  ð  ñ  ô  ð  ð  ð  ð  ð  ð  øøøð  ð  ð  ð  å	Œ•z¨Ð	-Ñ	-Ô	-ð ð Ø�Š˜˜�uÑÔÐðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s$   Å FÆFÆFÆ*GÇGÇGc                  óf  — t           j                             d¦  «        } |                      d¦  «                             dd¦  «        }d}|dz   }t          |ddd¬¦  «        }|                     |¦  «        }t          |d	d¬
¦  «        }|                     |¦  «        }t          ||d¬¦  «         dS )zCTest that a B-spline of degree=0 is equivalent to KBinsDiscretizer.iû| rœ   r+   r   r   ri   T)rF   rB   r*   rG   zonehot-dense)Ún_binsÚencodeÚstrategyg‚vIhÂ%<=r‚   N)	r   r   ÚRandomStateÚrandnr&   r   r'   r
   r   )Úrngr(   rÈ   rF   r\   ÚsplinesÚkbdÚkbinss           r   Ú'test_spline_transformer_kbindiscretizerrÑ   y  sº   € å
Œ)×
Ò
 Ñ
&Ô
&€CØ�	Š	�#‰Œ×Ò˜s AÑ&Ô&€AØ€FØ�q‰j€GåØ ¨À$ðñ ô €Dð × Ò  Ñ#Ô#€Gå
 &°È*Ð
UÑ
UÔ
U€CØ×Ò˜aÑ Ô €Eõ �G˜U¨Ð/Ñ/Ô/Ð/Ð/Ð/r!   ú1.8.0ú9The option `sparse_output` is available as of scipy 1.8.0)Úreason)rÂ   r_   r`   r;   r<   rG   FTc                 óº  — t           j                             |¦  «        }|                     d¦  «                             dd¦  «        }t          | |||d¬¦  «        }t          | |||d¬¦  «        }|                     |¦  «         |                     |¦  «         |                     |¦  «        }	|                     |¦  «        }
t          j	        |	¦  «        r|	j
        dk    sJ ‚t          |
|	                     ¦   «         ¦  «         t          j        |d¬	¦  «        }t          j        |d¬	¦  «        }t           j        t          j        |dz
  |d
¦  «        t          j        ||dz   d
¦  «        f         }|dk    r—d}t#          j        t&          |¬¦  «        5  |                     |¦  «         d d d ¦  «         n# 1 swxY w Y   d}t#          j        t&          |¬¦  «        5  |                     |¦  «         d d d ¦  «         d S # 1 swxY w Y   d S t          |                     |¦  «        |                     |¦  «                             ¦   «         ¦  «         d S )Nrœ   é(   r   F)rB   r*   r:   rG   Úsparse_outputTÚcsrr   rl   r   rÂ   rÃ   r-   zOut of bounds)r   r   rË   rÌ   r&   r   r4   rd   r   ÚissparseÚformatr   ÚtoarrayÚaminÚamaxro   rn   r1   r2   r3   )rB   r*   r:   rG   Úglobal_random_seedrÍ   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Ô
3€CØ�	Š	�#‰Œ×Ò˜r 1Ñ%Ô%€Aå"ØØØ#Ø!Øðñ ô €Jõ $ØØØ#Ø!Øðñ ô €Kð ‡N‚N�1ÑÔÐØ‡O‚O�AÑÔÐà ×*Ò*¨1Ñ-Ô-€NØ×(Ò(¨Ñ+Ô+€MÝŒ?˜>Ñ*Ô*ÐM¨~Ô/DÈÒ/MÐ/MÐ/MÐ/MÝ�M >×#9Ò#9Ñ#;Ô#;Ñ<Ô<Ð<õ ŒG�A˜AÐÑÔ€EÝŒG�A˜AÐÑÔ€EÝŒeÝ
Œ�E˜A‘I˜u bÑ)Ô)­2¬;°u¸eÀa¹iÈÑ+LÔ+LÐLô€Gð ˜ÒÐØ@ˆÝŒ]�:¨SÐ1Ñ1Ô1ð 	*ð 	*Ø× Ò  Ñ)Ô)Ð)ð	*ð 	*ð 	*ñ 	*ô 	*ð 	*ð 	*ð 	*ð 	*ð 	*ð 	*øøøð 	*ð 	*ð 	*ð 	*àˆÝŒ]�:¨SÐ1Ñ1Ô1ð 	+ð 	+Ø×!Ò! 'Ñ*Ô*Ð*ð	+ð 	+ð 	+ñ 	+ô 	+ð 	+ð 	+ð 	+ð 	+ð 	+ð 	+ð 	+øøøð 	+ð 	+ð 	+ð 	+ð 	+ð 	+õ 	Ø× Ò  Ñ)Ô)¨;×+@Ò+@ÀÑ+IÔ+I×+QÒ+QÑ+SÔ+Sñ	
ô 	
ð 	
ð 	
ð 	
s$   ÆF;Æ;F?ÇF?Ç#HÈH
ÈH
c                  óÀ   — dgdgg} t          j        t          d¬¦  «        5  t          d¬¦  «                             | ¦  «         ddd¦  «         dS # 1 swxY w Y   dS )zDTest that SplineTransformer with sparse=True raises for scipy<1.8.0.r+   r   zscipy>=1.8.0r-   T)r×   Nr0   )r(   s    r   Ú?test_spline_transformer_sparse_output_raise_error_for_old_scipyrè   Ç  s©   € ð ˆˆqˆcˆ
€AÝ	Œ•z¨Ð	8Ñ	8Ô	8ð 5ð 5Ý¨Ð-Ñ-Ô-×1Ò1°!Ñ4Ô4Ð4ð5ð 5ð 5ñ 5ô 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5øøøð 5ð 5ð 5ð 5ð 5ð 5s   ¢$AÁAÁAr×   c                 óJ  — |r,t           t          d¦  «        k     rt          j        d¦  «         t	          | ||||¬¦  «        }t          j        ddd¦  «        dd…df         }|                     |¦  «         |                     |¦  «        j	        d         |j
        k    sJ ‚dS )z8Test that transform results in n_features_out_ features.rÒ   rÓ   )rF   rB   rG   r:   r×   r   r+   r   N)r   r   r1   Úskipr   r   rn   r4   rd   re   rc   )rF   rG   rB   r:   r×   r\   r(   s          r   Ú&test_spline_transformer_n_features_outrë   Ò  s²   € ð ð Q�¥m°GÑ&<Ô&<Ò<Ð<ÝŒÐOÑPÔPÐPåØØØ!Ø#Ø#ðñ ô €Dõ 	Œ�A�q˜"ÑÔ˜a˜a˜a ˜gÔ&€AØ‡H‚HˆQ�K„K€Kà�>Š>˜!ÑÔÔ" 1Ô%¨Ô)=Ò=Ð=Ð=Ð=Ð=Ð=r!   )rš   r   z&degree=\(min_degree, max_degree\) must)r   g      ø?©rA   r   )r+   r   rA   z'int or tuple \(min_degree, max_degree\)c                 ó¸   — dgdgg}t          j        t          |¬¦  «        5  t          di | ¤Ž                     |¦  «         ddd¦  «         dS # 1 swxY w Y   dS )zBTest that we raise errors for invalid input in PolynomialFeatures.r+   r   r-   Nr/   )r1   r2   r3   r   r4   r5   s      r   Ú)test_polynomial_features_input_validationrî   í  s¬   € ð ˆˆqˆcˆ
€Aå	Œ•z¨Ð	1Ñ	1Ô	1ð ,ð ,ÝÐ$Ð$˜VÐ$Ð$×(Ò(¨Ñ+Ô+Ð+ð,ð ,ð ,ñ ,ô ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,øøøð ,ð ,ð ,ð ,ð ,ð ,r9   c                  óº   — t          j        d¦  «        d d …t           j        f         } t          j        t          j        | ¦  «        | | dz  | dz  g¦  «        }| |fS )NrŒ   r   rA   )r   r%   ÚnewaxisÚhstackÚ	ones_like)r(   ÚPs     r   Úsingle_feature_degree3rô   þ  sO   € å
Œ	�!‰Œ�Q�Q�Q�œ
�]Ô#€AÝ
Œ	•2”< ‘?”? A q¨!¡t¨Q°©TÐ2Ñ3Ô3€AØˆaˆ4€Kr!   z/degree, include_bias, interaction_only, indices©r   rA   )r   r   rA   ÚX_containerc                 óT  — | \  }}|� ||¦  «        }t          |||¬¦  «                             |¦  «        }|                     |¦  «        }	|�|	                     ¦   «         }	t	          |	|dd…|f         ¦  «         |j        dk    r|j        j        |j        |j        fk    sJ ‚dS dS )z9Test PolynomialFeatures on single feature up to degree 3.N©rB   rG   Úinteraction_onlyr   ©	r   r4   rd   rÛ   r   Ún_output_features_Úpowers_re   Ún_features_in_)
rô   rB   rG   rù   Úindicesrö   r(   ró   ÚtfÚouts
             r   Ú$test_polynomial_features_one_featurer    sÇ   € ð. "�D€A€qØÐØˆK˜‰NŒNˆÝ	Ø LÐCSð
ñ 
ô 
ç	‚cˆ!�f„fð ð �,Š,�q‰/Œ/€CØÐØ�kŠk‰mŒmˆÝ�C˜˜1˜1˜1˜g˜:œÑ'Ô'Ð'Ø	Ô˜qÒ Ð ØŒzÔ BÔ$9¸2Ô;LÐ#MÒMÐMÐMÐMð !Ð ØMÐMr!   c                  ó€  — t          j        d¦  «                             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ì   r+   r   r   rA   )r   r%   r&   rñ   )r(   Úx1Úx2ró   s       r   Útwo_features_degree3r  *  sþ   € å
Œ	�!‰Œ×Ò˜VÑ$Ô$€AØ	
ˆ1ˆ1ˆ1ˆbˆqˆbˆ5Œ€BØ	
ˆ1ˆ1ˆ1ˆaˆbˆ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   r+   r   rŽ   )r+   r   rŽ   ©r   r   )r   rA   rŽ   r   )rA   rŽ   r   )r   rA   rŽ   r   rŒ   é   r‹   é	   ©rA   rA   )r   rŒ   r  r‹   r  )rŒ   r  r‹   r  c                 óT  — | \  }}|� ||¦  «        }t          |||¬¦  «                             |¦  «        }|                     |¦  «        }	|�|	                     ¦   «         }	t	          |	|dd…|f         ¦  «         |j        dk    r|j        j        |j        |j        fk    sJ ‚dS dS )z5Test PolynomialFeatures on 2 features up to degree 3.Nrø   r   rú   )
r  rB   rG   rù   rþ   rö   r(   ró   rÿ   r   s
             r   Ú%test_polynomial_features_two_featuresr  @  sÈ   € ðF  �D€A€qØÐØˆK˜‰NŒNˆÝ	Ø LÐCSð
ñ 
ô 
ç	‚cˆ!�f„fð ð �,Š,�q‰/Œ/€CØÐØ�kŠk‰mŒmˆÝ�C˜˜1˜1˜1˜g˜:œÑ'Ô'Ð'Ø	Ô˜qÒ Ð ØŒzÔ BÔ$9¸2Ô;LÐ#MÒMÐMÐMÐMð !Ð ØMÐMr!   c                  óì  — t          j        d¦  «                             dd¦  «        } t          dd¬¦  «                             | ¦  «        }|                     ¦   «         }t          g d¢|¦  «         t          |¦  «        |                     | ¦  «        j	        d         k    sJ ‚t          dd	¬¦  «                             | ¦  «        }|                     g d
¢¦  «        }t          g d¢|¦  «         t          |¦  «        |                     | ¦  «        j	        d         k    sJ ‚t          dd	¬¦  «                             | ¦  «        }|                     g d
¢¦  «        }t          g d¢|¦  «         t          |¦  «        |                     | ¦  «        j	        d         k    sJ ‚t          ddd¬¦  «                             | ¦  «        }|                     g d
¢¦  «        }t          ddg|¦  «         t          |¦  «        |                     | ¦  «        j	        d         k    sJ ‚t          dd¬¦  «                             | ¦  «        }|                     g d¢¦  «        }t          g d¢|¦  «         d S )Né   r   rA   r   T©rB   rG   )
Ú1Úx0r  r  zx0^2zx0 x1zx0 x2zx1^2zx1 x2zx2^2r+   F)r   rR   Úc)r   rR   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õ   )r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r!  r	  rø   r  r  )úF40Dõ   â˜®õ   ×�)r  r"  r#  r$  )
r   r%   r&   r   r4   r[   r   rb   rd   re   )r(   Úpolyr]   s      r   Útest_polynomial_feature_namesr&  q  s‘  € Ý
Œ	�"‰Œ×Ò˜b !Ñ$Ô$€AÝ Q°TÐ:Ñ:Ô:×>Ò>¸qÑAÔA€DØ×.Ò.Ñ0Ô0€MÝØRÐRÐRØñô ð õ ˆ}ÑÔ §¢°Ñ!2Ô!2Ô!8¸Ô!;Ò;Ð;Ð;Ð;å Q°UÐ;Ñ;Ô;×?Ò?ÀÑBÔB€DØ×.Ò.¨¨¨Ñ?Ô?€MÝð	
ð 	
ð 	
ð* 	ñ-ô ð õ0 ˆ}ÑÔ §¢°Ñ!2Ô!2Ô!8¸Ô!;Ò;Ð;Ð;Ð;å V¸%Ð@Ñ@Ô@×DÒDÀQÑGÔG€DØ×.Ò.¨¨¨Ñ?Ô?€MÝð	
ð 	
ð 	
ð$ 	ñ'ô ð õ* ˆ}ÑÔ §¢°Ñ!2Ô!2Ô!8¸Ô!;Ò;Ð;Ð;Ð;åØ D¸4ðñ ô ç	‚cˆ!�f„fð 	ð ×.Ò.¨¨¨Ñ?Ô?€MÝ˜˜W�~ }Ñ5Ô5Ð5Ýˆ}ÑÔ §¢°Ñ!2Ô!2Ô!8¸Ô!;Ò;Ð;Ð;Ð;õ  Q°TÐ:Ñ:Ô:×>Ò>¸qÑAÔA€DØ×.Ò.Ð/QÐ/QÐ/QÑRÔR€MÝÐ>Ð>Ð>ÀÑNÔNÐNÐNÐNr!   )ÚdegrG   rù   ÚdtypeÚcsc_containerc                 óö  — t           j                             d¦  «        }|                     ddd¦  «        } ||¦  «        }t	          | ||¬¦  «        }|                     |                     |¦  «        ¦  «        }	|                     |                     |¦  «        ¦  «        }
t          j        |	¦  «        r|	j	        dk    sJ ‚|	j
        |
j
        k    sJ ‚t          |	                     ¦   «         |
¦  «         d S )Nr   r   ©rk   r   ©rG   rù   Úcsc©r   r   rË   Úrandintr   r'   Úastyper   rÙ   rÚ   r(  r   rÛ   )r'  rG   rù   r(  r)  rÍ   r(   ÚX_cscr   ÚXt_cscÚXt_denses              r   Útest_polynomial_features_csc_Xr4  ½  sî   € õ" Œ)×
Ò
 Ñ
"Ô
"€CØ�Š�A�q˜(Ñ#Ô#€AØˆM˜!ÑÔ€Eå
Ø˜,Ð9Iðñ ô €Cð ×Ò˜uŸ|š|¨EÑ2Ô2Ñ3Ô3€FØ× Ò  §¢¨%¡¤Ñ1Ô1€HåŒ?˜6Ñ"Ô"Ð= v¤}¸Ò'=Ð'=Ð'=Ð'=ØŒ<˜8œ>Ò)Ð)Ð)Ð)Ý˜fŸnšnÑ.Ô.°Ñ9Ô9Ð9Ð9Ð9r!   Úcsr_containerc                 óú  — t           j                             d¦  «        }|                     ddd¦  «        } ||¦  «        }t	          | ||¬¦  «        }|                     |                     |¦  «        ¦  «        }	|                     |                     |d¬¦  «        ¦  «        }
t          j        |	¦  «        r|	j	        dk    sJ ‚|	j
        |
j
        k    sJ ‚t          |	                     ¦   «         |
¦  «         d S )Nr   r   r+  r,  F)ÚcopyrØ   r.  )r'  rG   rù   r(  r5  rÍ   r(   ÚX_csrr   ÚXt_csrr3  s              r   Útest_polynomial_features_csr_Xr:  Ý  sô   € õ Œ)×
Ò
 Ñ
"Ô
"€CØ�Š�A�q˜(Ñ#Ô#€AØˆM˜!ÑÔ€Eå
Ø˜,Ð9Iðñ ô €Cð ×Ò˜uŸ|š|¨EÑ2Ô2Ñ3Ô3€FØ× Ò  §¢¨%°e Ñ!<Ô!<Ñ=Ô=€HåŒ?˜6Ñ"Ô"Ð= v¤}¸Ò'=Ð'=Ð'=Ð'=ØŒ<˜8œ>Ò)Ð)Ð)Ð)Ý˜fŸnšnÑ.Ô.°Ñ9Ô9Ð9Ð9Ð9r!   Ú
n_features)r+   rŽ   r   zmin_degree, max_degree))r   r+   )r   r   )r+   rA   )r   rŽ   )rA   rŽ   rù   c                 óü   —  |dgdg| dz
  gff¦  «        }t          |||¬¦  «        }|                     |¦  «         |j        }t          j        | d|||¬¦  «        }	|t	          d„ |	D ¦   «         ¦  «        k    sJ ‚dS )z?
    Test that n_output_features_ is calculated correctly.
    r+   r   )rB   rù   rG   ©r;  Ú
min_degreeÚ
max_degreerù   rG   c                 ó   — g | ]}d ‘ŒS )r+   r/   )Ú.0rC   s     r   ú
<listcomp>z)test_num_combinations.<locals>.<listcomp>  s   € Ð0Ð0Ð0 A˜aÐ0Ð0Ð0r!   N)r   r4   rû   Ú_combinationsrp   )
r;  r>  r?  rù   rG   r5  r—   r   Ú
num_combosÚcomboss
             r   Útest_num_combinationsrF  û  s´   € ð 	ˆ˜�s˜a˜S :°¡>Ð"2Ð3Ð4Ñ5Ô5€AÝ
ØØ)Ø!ðñ ô €Cð
 ‡G‚GˆA�J„J€JØÔ'€JåÔ-ØØØØ)Ø!ðñ ô €Fð �Ð0Ð0¨Ð0Ñ0Ô0Ñ1Ô1Ò1Ð1Ð1Ð1Ð1Ð1r!   c                 óÔ  —  |t          dddd¬¦  «        ¦  «        }|                     ¦   «         }t          | ||¬¦  «        }|                     |                     |¦  «        ¦  «        }|                     |                     |¦  «        ¦  «        }	t          j        |¦  «        r|j        dk    sJ ‚|j        |	j        k    sJ ‚t          |                     ¦   «         |	¦  «         d S )Néè  r   ç      à?r   ©Úrandom_stater,  rØ   )
Úsparse_randomrÛ   r   r'   r0  r   rÙ   rÚ   r(  r   )
r'  rG   rù   r(  r5  r8  r(   r   r9  r3  s
             r   Ú%test_polynomial_features_csr_X_floatsrM    sâ   € ð ˆM�-¨¨b°#ÀAÐFÑFÔFÑGÔG€EØ�Š‰Œ€Aå
Ø˜,Ð9Iðñ ô €Cð ×Ò˜uŸ|š|¨EÑ2Ô2Ñ3Ô3€FØ× Ò  §¢¨%¡¤Ñ1Ô1€HåŒ?˜6Ñ"Ô"Ð= v¤}¸Ò'=Ð'=Ð'=Ð'=ØŒ<˜8œ>Ò)Ð)Ð)Ð)Ý˜fŸnšnÑ.Ô.°Ñ9Ô9Ð9Ð9Ð9r!   )Úzero_row_indexr'  rù   ))r   r   T)r+   r   T©r   r   T)r   rA   T)r+   rA   T)r   rA   T)r   r   F)r+   r   F©r   r   F)r   rA   F)r+   rA   F)r   rA   Fc                 óš  —  |t          dddd¬¦  «        ¦  «        }d|| d d …f<   |                     ¦   «         }t          |d|¬¦  «        }|                     |¦  «        }|                     |¦  «        }t	          j        |¦  «        r|j        d	k    sJ ‚|j        |j        k    sJ ‚t          |                     ¦   «         |¦  «         d S )
NrA   r   r£   r   rJ  r¢   Fr,  rØ   ©	rL  rÛ   r   r'   r   rÙ   rÚ   r(  r   )	rN  r'  rù   r5  r8  r(   r   r9  r3  s	            r   Ú'test_polynomial_features_csr_X_zero_rowrS  6  sÖ   € ð* ˆM�-¨¨2¨sÀÐCÑCÔCÑDÔD€EØ"€Eˆ.˜!˜!˜!Ð
ÑØ�Š‰Œ€Aå
˜S¨uÐGWÐ
XÑ
XÔ
X€CØ×Ò˜uÑ%Ô%€FØ× Ò  Ñ#Ô#€HåŒ?˜6Ñ"Ô"Ð= v¤}¸Ò'=Ð'=Ð'=Ð'=ØŒ<˜8œ>Ò)Ð)Ð)Ð)Ý˜fŸnšnÑ.Ô.°Ñ9Ô9Ð9Ð9Ð9r!   ))TTrv   rw   )FFc                 óˆ  —  |t          dddd¬¦  «        ¦  «        }|                     ¦   «         }t          d| |¬¦  «        }|                     |¦  «        }|                     |¦  «        }t	          j        |¦  «        r|j        dk    sJ ‚|j        |j        k    sJ ‚t          |                     ¦   «         |¦  «         d S )	NrH  r   rI  r   rJ  rŽ   r,  rØ   rR  )rG   rù   r5  r8  r(   r   r9  r3  s           r   Ú'test_polynomial_features_csr_X_degree_4rU  Z  sÌ   € ð ˆM�-¨¨b°#ÀAÐFÑFÔFÑGÔG€EØ�Š‰Œ€Aå
Ø	˜Ð7Gðñ ô €Cð ×Ò˜uÑ%Ô%€FØ× Ò  Ñ#Ô#€HåŒ?˜6Ñ"Ô"Ð= v¤}¸Ò'=Ð'=Ð'=Ð'=ØŒ<˜8œ>Ò)Ð)Ð)Ð)Ý˜fŸnšnÑ.Ô.°Ñ9Ô9Ð9Ð9Ð9r!   )r'  Údimrù   )
)r   r+   TrO  )rA   r+   T)rA   r   T)rA   rA   T)r   r+   FrP  )rA   r+   F)rA   r   F)rA   rA   Fc                 ó†  —  |t          d|dd¬¦  «        ¦  «        }|                     ¦   «         }t          | |¬¦  «        }|                     |¦  «        }|                     |¦  «        }t	          j        |¦  «        r|j        dk    sJ ‚|j        |j        k    sJ ‚t          |                     ¦   «         |¦  «         d S )NrH  rI  r   rJ  )rù   rØ   rR  )	r'  rV  rù   r5  r8  r(   r   r9  r3  s	            r   Ú(test_polynomial_features_csr_X_dim_edgesrX  p  sÁ   € ð" ˆM�-¨¨c°3ÀQÐGÑGÔGÑHÔH€EØ�Š‰Œ€Aå
˜SÐ3CÐ
DÑ
DÔ
D€CØ×Ò˜uÑ%Ô%€FØ× Ò  Ñ#Ô#€HåŒ?˜6Ñ"Ô"Ð= v¤}¸Ò'=Ð'=Ð'=Ð'=ØŒ<˜8œ>Ò)Ð)Ð)Ð)Ý˜fŸnšnÑ.Ô.°Ñ9Ô9Ð9Ð9Ð9r!   c           
      óÊ  ‡ — ˆ 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¬	¦  «        }|                     |d
d|j        |j        ¬¦  «        }|t          j	        t           j
        ¦  «        j        k    rLd}t          j        t          |¬¦  «        5  |                     |
¦  «         ddd¦  «         n# 1 swxY w Y   dS |                     |
¦  «        }|                     ¦   «         \  }}||z   } |||	t%          ‰  ¦  «                 |	d         ¦  «        |z   }|r	dg|dz
  z  ng }|r	d
g|dz
  z  ng }t'          d¦  «        D �]R}|d|z           }|d|z  dz            }|	d|z           }|	d|z  dz            }|r*|                     d¦  «         |                     d
¦  «         |                     ||g¦  «         |                     |t%          |¦  «        z   |t%          |¦  «        z   g¦  «         ‰ se|                     ||z  ||z  ||z  g¦  «         |                      ||||¦  «        |z    ||||¦  «        |z    ||||¦  «        |z   g¦  «         �Œ|                     ||z  g¦  «         |                      ||||¦  «        |z   ¦  «         �ŒTt%          |¦  «        dz   dt%          ‰  ¦  «        z  z   }|j        |dz   k    sJ ‚|j        |k    sJ ‚|j        ||dz   fk    sJ ‚|j        j        |j        j        cxk    rt           j        k    sn J ‚|j                             ¦   «         t          j	        t           j        ¦  «        j        k    sJ ‚|rt9          t'          |dz
  ¦  «        ¦  «        ng }|                     |dz
  g|z  |dz
  g|z  z   ¦  «         t;          |j        |¦  «         t?          ||¦  «         t?          ||¦  «         dS )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   rA   r+   r/   )r¿   ÚiÚjrù   s      €r   Údegree_2_calczRtest_csr_polynomial_expansion_index_overflow_non_regression.<locals>.degree_2_calc�  sU   ø€ Øð 	/Ø�q‘5˜A˜q™D 1 q¡5™L¨QÑ.Ñ.°Ñ2°QÑ6Ð6à�q‘5˜A˜q™D 1™H¨™?Ñ*¨QÑ.Ð.r!   é   iÁÔ r+   r   )r(  r   )re   r(  ©rù   rG   rB   r   r=  útThe output that would result from the current configuration would have \d* features which is too large to be indexedr-   NrA   ) r   Úfloat32r%   Úint64r�   r   Ú_num_combinationsrù   rG   ÚiinfoÚintpr·   r1   r2   r3   r4   r'   ÚnonzeroÚintr¹   ÚappendÚextendrû   r(  re   Úindptrrþ   Úint32Úlistr   Údatar   )rù   rG   r5  r]  Ú	n_samplesr;  Ú
data_dtyperm  ÚrowÚcolr(   ÚpfÚnum_combinationsrÅ   rf   Úrow_nonzeroÚcol_nonzeroÚn_degree_1_features_outÚmax_degree_2_idxÚdata_targetÚcol_nonzero_targetr[  r—   r†   Úx_idxÚy_idxÚnnz_per_rowÚrow_nonzero_targets   `                           r   Ú;test_csr_polynomial_expansion_index_overflow_non_regressionr~  �  s�  ø€ ð /ð /ð /ð /ð /ð €IØ€JÝ”€JÝŒ9�Q˜¥¤Ð*Ñ*Ô*€DÝ
Œ(�I ‘M 9¨q¡=°)¸a±-ÀÈQÁÐOÑ
PÔ
P€Cõ Œ(Ø	�a‰˜ a™¨°a©¸Àa¹ÐHÕPRÔPXðñ ô €Cð 	ˆØ	��SˆzÐØ˜*Ð%Øð	ñ 	ô 	€Aõ
 
Ø)¸ÈQð
ñ 
ô 
€Bð ×+Ò+ØØØØÔ,Ø”_ð ,ñ ô Ðð �"œ(¥2¤7Ñ+Ô+Ô/Ò/Ð/ð>ð 	õ Œ]�:¨SÐ1Ñ1Ô1ð 	ð 	Ø�FŠF�1‰IŒIˆIð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	àˆØ×Ò˜qÑ!Ô!€GØ&ŸšÑ0Ô0Ñ€K�Ø(¨<Ñ7Ðàˆ�j #¥cÐ.>Ð*>Ñ&?Ô&?Ô"@À#ÀaÄ&ÑIÔIØ
!ñ	"ð ð ,8Ð?�1�#˜ Q™Ñ'Ð'¸R€KØ2>ÐF˜!˜ 	¨A¡Ñ.Ð.ÀBÐå�1‰XŒXð ñ ˆØ��Q‘ŒKˆØ��Q‘˜‘ŒOˆØ�A˜‘E”
ˆØ�A˜‘E˜A‘I”ˆØð 	)Ø×Ò˜qÑ!Ô!Ð!Ø×%Ò% aÑ(Ô(Ð(Ø×Ò˜A˜q˜6Ñ"Ô"Ð"Ø×!Ò!Ø•S˜Ñ&Ô&Ñ&¨µ°LÑ0AÔ0AÑ(AÐBñ	
ô 	
ð 	
ð  ð 	Ø×Ò  A¡ q¨1¡u¨a°!©eÐ4Ñ5Ô5Ð5Ø×%Ò%à!�M *¨e°UÑ;Ô;Ð>UÑUØ!�M *¨e°UÑ;Ô;Ð>UÑUØ!�M *¨e°UÑ;Ô;Ð>UÑUðñô ð ñ ð ×Ò  A¡˜wÑ'Ô'Ð'Ø×%Ò%Ø�˜j¨%°Ñ7Ô7Ð:QÑQñô ð ñ õ �lÑ#Ô# aÑ'¨!­cÐ6FÐ2FÑ.GÔ.GÑ*GÑG€KàÔ Ð$4°qÑ$8Ò8Ð8Ð8Ð8ØŒ=˜JÒ&Ð&Ð&Ð&ØŒ=˜YÐ(8¸1Ñ(<Ð=Ò=Ð=Ð=Ð=ØŒ>Ô 7¤?Ô#8ÐDÐDÒDÐD½B¼HÒDÐDÐDÐDÐDÐDàŒ?×ÒÑ Ô ¥2¤8­B¬HÑ#5Ô#5Ô#9Ò9Ð9Ð9Ð9à7CÐK��e I°¡MÑ2Ô2Ñ3Ô3Ð3ÈÐØ×ÒØ	�Q‰ˆ˜+Ñ%¨°Q©¨¸+Ñ(EÑEñô ð õ �G”L +Ñ.Ô.Ð.Ý�{Ð$6Ñ7Ô7Ð7Ý�{Ð$6Ñ7Ô7Ð7Ð7Ð7s   ÄD<Ä<E ÅE zdegree, n_features)r   éÿÿ  )rA   i(	  )rA   r  c                 óú  — dg}dg}|dz
  g}|dz
  t          |¦  «        z   g}|                     ||dz   z  dz  |d         z   ¦  «         |                     ||dz   z  |dz   z  dz  |d         z   ¦  «          ||||ff¦  «        }	t          ||| ¬¦  «        }
|
                     |d| |
j        |
j        ¬¦  «        }|t          j        t          j        ¦  «        j	        k    rLd}t          j        t          |¬	¦  «        5  |
                     |	¦  «         d
d
d
¦  «         n# 1 swxY w Y   d
S t          t          d¦  «        k     ràd}t          j        t          j        ¦  «        j	        }||z   }t#          d| dz   ¦  «        D ]T}t%          |	j        ||¦  «        }t)          |||¦  «        dz
  }||dz   z  }t          ||¦  «        |k    }|| o||k    z  }ŒU|rLd}t          j        t          |¬	¦  «        5  |
                     |	¦  «        }d
d
d
¦  «         n# 1 swxY w Y   d
S t          t          d¦  «        k     rZ|dk    rT| dk    rN|sLd}t          j        t          |¬	¦  «        5  |
                     |	¦  «        }d
d
d
¦  «         n# 1 swxY w Y   d
S |
                     |	¦  «        }|t          j        t          j        ¦  «        j	        k    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n J ‚|j        |k    sJ ‚|r |d         t          j        d¦  «        k    sJ ‚t#          |¦  «        D ]*}|d||         f         t          j        d¦  «        k    sJ ‚Œ+||z  }| dk    r|d|z   z  }|
j        || dz
           dz   |z
  k    sJ ‚d
S )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£   r   r+   r   rŒ   r_  r=  r`  r-   NrÒ   Fz>In scipy versions `<1.8.0`, the function `scipy.sparse.hstack`z1.9.2r  z>In scipy versions `<1.9.2`, the function `scipy.sparse.hstack`©r   r   rA   )rg  rh  r   rc  rù   rG   r   rd  re  r·   r1   r2   r3   r4   r   r   rk  r¹   r   rj  r   r'   rb  r(  re   rû   rþ   ÚnnzÚapprox)rB   r;  rù   rG   r5  rm  rp  rq  Úexpected_indicesr(   rr  rs  rÅ   Úhas_bugÚ	max_int32Úcumulative_sizer'  Ú
max_indptrÚmax_indicesÚneeds_int64rf   Úexpected_dtypeÚnon_bias_termsÚexpected_nnzÚidxÚoffsets                             r   Ú,test_csr_polynomial_expansion_index_overflowr�    sX  € ð4 ˆ5€DØˆ#€CØ˜‰>Ð
€Cð 	�Q‰�˜\Ñ*Ô*Ñ*ðÐð ×Ò˜J¨*°q©.Ñ9¸QÑ>ÐAQÐRSÔATÑTÑUÔUÐUà×ÒØ�j 1‘nÑ%¨°a©Ñ8¸AÑ=Ð@PÐQRÔ@SÑSñô ð ð 	ˆ�t˜c 3˜ZÐ(Ñ)Ô)€AÝ	Ø)¸ÈVð
ñ 
ô 
€Bð ×+Ò+ØØØØÔ,Ø”_ð ,ñ ô Ðð �"œ(¥2¤7Ñ+Ô+Ô/Ò/Ð/ð>ð 	õ Œ]�:¨SÐ1Ñ1Ô1ð 	ð 	Ø�FŠF�1‰IŒIˆIð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	àˆõ
 •M 'Ñ*Ô*Ò*Ð*ØˆÝ”H�RœXÑ&Ô&Ô*ˆ	Ø$ |Ñ3ˆÝ˜˜F Q™JÑ'Ô'ð 	Gð 	GˆCÝ(¨¬Ð3CÀSÑIÔIˆJÝ,¨ZÐ9IÈ3ÑOÔOÐRSÑSˆKØ˜{¨Q™Ñ.ˆOÝ˜k¨:Ñ6Ô6¸ÒBˆKØ˜;�ÐF¨?¸YÒ+FÑFˆGˆGØð 	ØSˆCÝ”�z°Ð5Ñ5Ô5ð .ð .Ø×*Ò*¨1Ñ-Ô-�ð.ð .ð .ñ .ô .ð .ð .ð .ð .ð .ð .øøøð .ð .ð .ð .àˆFõ 	•] 7Ñ+Ô+Ò+Ð+Ø˜%ÒÐØ�aŠKˆKØ ð ð PˆÝŒ]�:¨SÐ1Ñ1Ô1ð 	*ð 	*Ø×&Ò& qÑ)Ô)ˆGð	*ð 	*ð 	*ñ 	*ô 	*ð 	*ð 	*ð 	*ð 	*ð 	*ð 	*øøøð 	*ð 	*ð 	*ð 	*àˆØ×Ò˜qÑ!Ô!€Gà!1µB´H½R¼XÑ4FÔ4FÔ4JÒ!JÐ!J•R”X�XÕPRÔPX€Nà˜& 1™*­Ð0@Ð,@Ñ(AÔ(AÑAÑA€NÝ�|Ñ$Ô$ ~Ñ5€LØŒ=˜AœGÒ#Ð#Ð#Ð#ØŒ=˜Q Ô 5Ð6Ò6Ð6Ð6Ð6ØŒ>Ô 7¤?Ô#8ÐJÐJÒJÐJ¸NÒJÐJÐJÐJÐJÐJØŒ;˜,Ò&Ð&Ð&Ð&àð 3Ø�tŒ}¥¤¨cÑ 2Ô 2Ò2Ð2Ð2Ð2Ý�^Ñ$Ô$ð Gð GˆØ�qÐ*¨3Ô/Ð/Ô0µF´MÀ#Ñ4FÔ4FÒFÐFÐFÐFÐFà 
Ñ*€FØ�‚{€{Ø�!�j‘.Ñ ˆØÔ Ð$4°V¸a±ZÔ$@À1Ñ$DÀvÑ$MÒMÐMÐMÐMÐMÐMs6   Ä D"Ä"D&Ä)D&Ç8HÈHÈ!HÉ*JÊJÊJc                 óÒ  — t          j        t           j        ¦  «        j        dz  }dg}dg}|dz
  g} ||||ff¦  «        }t	          | |d¬¦  «        }d}	t          j        t          |	¬¦  «        5  |                     |¦  «         d d d ¦  «         n# 1 swxY w Y   t          j        t          |	¬¦  «        5  | 	                    |¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )	Nr   r£   r   r+   r  r_  r`  r-   )
r   rd  rb  r·   r   r1   r2   r3   r4   r'   )
rù   rG   r5  r;  rm  rp  rq  r(   rr  rÅ   s
             r   Ú0test_csr_polynomial_expansion_too_large_to_indexr’  z  s|  € õ ”�"œ(Ñ#Ô#Ô'¨1Ñ,€JØˆ5€DØˆ#€CØ˜‰>Ð
€CØˆ�t˜c 3˜ZÐ(Ñ)Ô)€AÝ	Ø)¸ÈVð
ñ 
ô 
€Bð	6ð õ 
Œ•z¨Ð	-Ñ	-Ô	-ð ð Ø
�Šˆq‰	Œ	ˆ	ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð å	Œ•z¨Ð	-Ñ	-Ô	-ð ð Ø
×Ò˜ÑÔÐðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s$   Á1BÂBÂBÂ9CÃC Ã#C Úsparse_containerc                 ó´  — t          j        d¦  «        }t          dd¬¦  «        }d}t          j        t
          |¬¦  «        5  |                     |¦  «         ddd¦  «         n# 1 swxY w Y   t          dd¬¦  «        }d	}t          j        t
          |¬¦  «        5  |                     |¦  «         ddd¦  «         n# 1 swxY w Y   | | |¦  «        fD ]}t          dd
¬¦  «        }|                     |¦  «        }t          j        |¦  «        r| 	                    ¦   «         }t          |t          j        |j        d         df¦  «        ¦  «         Œ€dS )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.r-   Nr�  zoSetting both min_degree and max_degree to zero and include_bias to False would result in an empty output array.Tr+   )r   Úonesr   r1   r2   r3   r'   r   rÙ   rÛ   r   re   )r“  r(   r%  r7   Ú_XÚoutputs         r   Ú1test_polynomial_features_behaviour_on_zero_degreer˜  ’  sæ  € õ
 	Œ�ÑÔ€AÝ Q°UÐ;Ñ;Ô;€Dð	"ð õ 
Œ•z¨Ð	1Ñ	1Ô	1ð ð Ø×Ò˜1ÑÔÐðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð õ  V¸%Ð@Ñ@Ô@€Dð	8ð õ 
Œ•z¨Ð	1Ñ	1Ô	1ð ð Ø×Ò˜1ÑÔÐðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð Ð"Ð" 1Ñ%Ô%Ð&ð =ð =ˆÝ!¨¸Ð>Ñ>Ô>ˆØ×#Ò# BÑ'Ô'ˆåŒ?˜6Ñ"Ô"ð 	&Ø—^’^Ñ%Ô%ˆFÝ˜6¥2¤7¨A¬G°A¬J¸¨?Ñ#;Ô#;Ñ<Ô<Ð<Ð<ð=ð =s$   ÁA%Á%A)Á,A)ÂC Ã CÃCc                  ó˜   — t           j        dk    s t           j        dk    rt           j        dk    rd} nd} t          ¦   «         | k    sJ ‚d S )NÚwin32ì        Ú
emscriptenr‹   é   )ÚsysÚplatformÚmaxsizer   )Úexpected_sizes    r   Útest_sizeof_LARGEST_INT_tr¢  ±  sS   € õ „|�wÒÐÝŒ�uÒÐ¥¤°Ò!=Ð!=àˆˆàˆå$Ñ&Ô&¨-Ò7Ð7Ð7Ð7Ð7Ð7r!   rš  zyOn Windows, scikit-learn is typically compiled with MSVC that does not support int128 arithmetic (at the time of writing))rÔ   Úrunc                 ó  — t          t          j        t          j        ¦  «        j        dz  dz   ¦  «        }dg}dg}|dz
  g}|dz
  g}|                     t          ||dz   z  dz  |d         z   ¦  «        ¦  «         |                     t          ||dz   z  |dz   z  dz  |d         z   ¦  «        ¦  «          | |||ff¦  «        }t          ddd¬	¦  «        }t          j        d
k    rMd}t          j
        t          |¬¦  «        5  |                     |¦  «         d d d ¦  «         d S # 1 swxY w Y   d S |                     |¦  «        }	t          d¦  «        D ]*}
|	d||
         f         t          j        d¦  «        k    sJ ‚Œ+d S )NgUUUUUUÕ?rA   r£   r   r+   r   rŒ   Fr_  r›  r`  r-   )rg  r   rd  rb  r·   rh  r   rž  r   r1   r2   r3   r'   r¹   rƒ  )r5  r;  rm  rp  rq  r„  r(   rr  rÅ   rf   rŽ  s              r   Ú*test_csr_polynomial_expansion_windows_failr¥  ¿  s  € õ •R”X�bœhÑ'Ô'Ô+°Ñ6¸Ñ:Ñ;Ô;€JØˆ5€DØˆ#€CØ˜‰>Ð
€Cð 	�Q‰ðÐð ×ÒÝˆJ˜* q™.Ñ)¨QÑ.Ð1AÀ!Ô1DÑDÑEÔEñô ð ð ×ÒÝˆJ˜* q™.Ñ)¨Z¸!©^Ñ<ÀÑAÐDTÐUVÔDWÑWÑXÔXñô ð ð 	ˆ�t˜c 3˜ZÐ(Ñ)Ô)€AÝ	¨UÀÈqÐ	QÑ	QÔ	Q€BÝ
„{�eÒÐð:ð 	õ
 Œ]�:¨SÐ1Ñ1Ô1ð 	 ð 	 Ø×Ò˜QÑÔÐð	 ð 	 ð 	 ñ 	 ô 	 ð 	 ð 	 ð 	 ð 	 ð 	 ð 	 ð 	 øøøð 	 ð 	 ð 	 ð 	 ð 	 ð 	 ð ×"Ò" 1Ñ%Ô%ˆÝ˜‘8”8ð 	Kð 	KˆCØ˜1Ð.¨sÔ3Ð3Ô4½¼ÀcÑ8JÔ8JÒJÐJÐJÐJÐJð	Kð 	Ks   ÄD(Ä(D,Ä/D,)Urž  Únumpyr   r1   Únumpy.testingr   r   Úscipyr   Úscipy.interpolater   Úscipy.sparser   rL  Úsklearn.linear_modelr   Úsklearn.pipeliner	   Úsklearn.preprocessingr
   r   r   Ú/sklearn.preprocessing._csr_polynomial_expansionr   r   r   Úsklearn.utils._testingr   Úsklearn.utils.fixesr   r   r   r   ÚmarkÚparametrizer)   r8   rD   r^   rg   r¹   rs   rˆ   r�   r“   rŸ   r«   rµ   rÀ   rÆ   rÑ   Úskipifræ   rè   rë   rî   Úfixturerô   Úslicer  r  r  r&  rg  ra  Úfloat64r4  r:  rF  rM  rS  rU  rX  r~  Úsqrtrd  rb  r·   r�  r’  r˜  r¢  ÚxfailrŸ  r¥  r/   r!   r   ú<module>r¹     sÚ  ðØ 
€
€
€
à Ð Ð Ð Ø €€€Ø =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ø Ð Ð Ð Ð Ð Ø %Ð %Ð %Ð %Ð %Ð %Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0à 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø %Ð %Ð %Ð %Ð %Ð %ðð ð ð ð ð ð ð ð ð ð
ð ð ð ð ð ð ð ð ð ð
 =Ð <Ð <Ð <Ð <Ð <ðð ð ð ð ð ð ð ð ð ð ð ð „×Ò˜Ð!3Ð5FÐ GÑHÔHð	9ð 	9ñ IÔHð	9ð „×ÒØà
�Q�C�5Ð	ÐNÐOØ
�Q˜�F˜Q ˜FÐ#Ð	$Ð&SÐTØ
�Q�C˜!˜�:Ð	Ð JÐKðñô ð+ð +ñô ð+ð „×Ò˜¨:°zÐ*BÑCÔCðð ñ DÔCðð#ð #ð #ðL „×ÒØØ2Ð2Ð2ñô ð „×Ò˜ A q 6Ñ*Ô*ð2ð 2ñ +Ô*ñ	ô ð
2ð „×Ò˜ 5 5¨¨A¡;¤;Ñ/Ô/Ø„×Ò˜ E E¨!¨Q¡K¤KÑ0Ô0Ø„×Ò˜ 9¨jÐ"9Ñ:Ô:Ø„×Ò˜¨:°zÐ*BÑCÔCð>ð >ñ DÔCñ ;Ô:ñ 1Ô0ñ 0Ô/ð>ð2 „×Ò˜& +Ð.°ÀÐ0NÑOÔOð3ð 3ñ PÔOð3ð, „×ÒØ;Ð;Ð;à	�A�t˜X˜RœX¨¨1 v°°1¨v¸¸2°wÐ&?Ñ@Ô@ÐAàØØˆBŒHÐ*Ð*Ð*Ñ+Ô+ØˆBŒH�q˜!�f˜q !˜f q¨" gÐ.Ñ/Ô/ð		
ð 
�A�t˜X˜RœX¨¨1 v°°1¨v¸¸2°wÀÀBÀÐ&HÑIÔIÐJØ	�Q˜˜h˜bœh¨¨A¨°°A°¸¸B¸Ð'@ÑAÔAÐBàØØˆBŒHÐ*Ð*Ð*Ñ+Ô+ØˆBŒH�q˜!�f˜q !˜f q¨" gÐ.Ñ/Ô/ð		
ðñô ð(0ð 0ñ)ô ð(0ð „×Ò˜& +Ð.°ÀÐ0NÑOÔOðIð Iñ PÔOðIð>ð ð ð$4ð 4ð 4ð, „×Ò˜ A q 6Ñ*Ô*ð#"ð #"ñ +Ô*ð#"ðL „×Ò˜& +Ð.°ÀÐ0NÑOÔOØ„×Ò˜ ? ? ?Ñ3Ô3ð3ð 3ñ 4Ô3ñ PÔOð3ðl0ð 0ð 0ð( „×ÒØ��˜wÑ'Ô'Ò'ØFð ñ ô ð „×Ò˜ 5 5¨¨A¡;¤;Ñ/Ô/Ø„×Ò˜ 9¨jÐ"9Ñ:Ô:Ø„×ÒØÐLÐLÐLñô ð „×Ò˜¨%°¨Ñ7Ô7ð-
ð -
ñ 8Ô7ñô ñ ;Ô:ñ 0Ô/ñ	ô ð-
ð` „×ÒØ�-�- Ñ(Ô(Ò(ØFð ñ ô ð5ð 5ñ	ô ð5ð „×Ò˜ Q¨ GÑ,Ô,Ø„×Ò˜¨$°¨Ñ7Ô7Ø„×Ò˜ A q 6Ñ*Ô*Ø„×ÒØÐLÐLÐLñô ð „×Ò˜¨5°$¨-Ñ8Ô8ð>ð >ñ 9Ô8ñô ñ +Ô*ñ 8Ô7ñ -Ô,ð>ð( „×ÒØà
�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˜i˜iÐ(Ø	�˜  1˜vÐ&Ø	��t˜a˜SÐ!Ø	�˜˜bÐ!ð	ñô ð „×Ò˜¨¨°Ñ(?À.Ñ(PÑQÔQðNð Nñ RÔQñô ðNð. €„ÑÔðð ñ Ôðð* „×ÒØ5à	
ˆD�%˜˜˜q !™œÐ%Ø	
ˆE�5˜%˜%  1™+œ+Ð&Ø	
ˆD�$˜˜˜Ð%Ø	
ˆE�4˜˜˜Ð#Ø	��u˜l˜l˜lÐ+Ø	�˜˜y˜y˜yÐ)Ø	��t˜a ˜VÐ$Ø	�˜˜q˜cÐ"Ø	
ˆD�%˜˜˜t TÑ*Ô*Ð+Ø	
ˆE�5˜%˜%  4™.œ.Ð)Ø	
ˆD�$˜˜˜Ð%Ø	
ˆE�4˜˜˜Ð#Ø	��uÐ6Ð6Ð6Ð7Ø	�˜˜u˜u Q¨™~œ~Ð.Ø	��t˜a ˜VÐ$Ø	�˜˜q˜cÐ"Ø	��u˜o˜o˜oÐ.Ø	�˜˜|˜|˜|Ð,Ø	��t˜a˜SÐ!Ø	�˜˜bÐ!ð)ñô ð2 „×Ò˜¨¨°Ñ(?À.Ñ(PÑQÔQðNð Nñ RÔQñ3ô ð4Nð.IOð IOð IOðX „×ÒØ8Ð8Ð8à	
ˆD�%˜ÐØ	
ˆD�%˜ÐØ	
ˆD�%˜œÐ$Ø	
ˆD�%˜œÐ$Ø	
ˆE�5˜"œ*Ð%Ø	
ˆE�4˜œÐ$Ø	
ˆE�5˜"œ*Ð%Ø	
ˆE�4˜œÐ$ð	ñô ð „×Ò˜¨.Ñ9Ô9ð:ð :ñ :Ô9ñô ð:ð$ „×ÒØ8Ð8Ð8à	
ˆD�%˜ÐØ	
ˆD�%˜ÐØ	
ˆD�%˜œÐ$Ø	
ˆD�%˜œÐ$Ø	
ˆE�5˜"œ*Ð%Ø	
ˆE�4˜œÐ$ðñ
ô 
ð „×Ò˜¨.Ñ9Ô9ð:ð :ñ :Ô9ñ
ô 
ð:ð$ „×Ò˜ y y yÑ1Ô1Ø„×ÒØÐFÐFÐFñô ð „×ÒÐ+¨d°E¨]Ñ;Ô;Ø„×Ò˜¨$°¨Ñ7Ô7Ø„×Ò˜¨.Ñ9Ô9ð2ð 2ñ :Ô9ñ 8Ô7ñ <Ô;ñô ñ 2Ô1ð2ð2 „×ÒØ8Ð8Ð8à	
ˆD�%˜œÐ$Ø	
ˆD�%˜œÐ$Ø	
ˆE�5˜"œ*Ð%Ø	
ˆE�4˜œÐ$ð	ñô ð „×Ò˜¨.Ñ9Ô9ð:ð :ñ :Ô9ñô ð:ð" „×ÒØ1Ð1Ð1ðð ð ñô ð" „×Ò˜¨.Ñ9Ô9ð:ð :ñ :Ô9ñ#ô ð$:ð$ „×ÒØÐ'Ð(Ø@Ð@Ð@ñô ð „×Ò˜¨.Ñ9Ô9ð:ð :ñ :Ô9ñ	ô ð
:ð" „×ÒØ&Ð&Ð&ðð ð ñô ð „×Ò˜¨.Ñ9Ô9ð
:ð 
:ñ :Ô9ñô ð 
:ð „×ÒÐ+¨d°E¨]Ñ;Ô;Ø„×Ò˜¨$°¨Ñ7Ô7Ø„×Ò˜¨.Ñ9Ô9ðo8ð o8ñ :Ô9ñ 8Ô7ñ <Ô;ðo8ðd „×ÒØð 	Øð 
ˆCˆC��”˜˜œ ¤Ñ*Ô*Ô.Ñ/Ô/°!Ñ3Ñ4Ô4Ð5Øð 
ˆCˆC��”˜˜œ ¤Ñ*Ô*Ô.Ñ/Ô/Ñ0Ô0Ð1ðñô ð  „×ÒÐ+¨d°E¨]Ñ;Ô;Ø„×Ò˜¨$°¨Ñ7Ô7Ø„×Ò˜¨.Ñ9Ô9ðbNð bNñ :Ô9ñ 8Ô7ñ <Ô;ñ!ô ð&bNðJ „×ÒÐ+¨d°E¨]Ñ;Ô;Ø„×Ò˜¨$°¨Ñ7Ô7Ø„×Ò˜¨.Ñ9Ô9ðð ñ :Ô9ñ 8Ô7ñ <Ô;ðð* „×ÒÐ+¨^¸nÑ-LÑMÔMð=ð =ñ NÔMð=ð<8ð 8ð 8ð „×ÒØ„L�GÒð	6ð 	ð ñ ô ð „×Ò˜¨.Ñ9Ô9ð"Kð "Kñ :Ô9ñô ð"Kð "Kð "Kr!   