
    -i0                     B   S SK rS SKrS SKJr  S SKJr  S SKJrJ	r	J
r
JrJrJr  S rS rS rS rS	 r\R&                  S
 5       r\R&                  S 5       rS r\R&                  S 5       rS rS rS rS rS rS rS rS rS r S r!S r"S r#S r$S r%S r&S r'S r(g)    N)ndimage)connected_components)PatchExtractor_extract_patchesextract_patches_2dgrid_to_graphimg_to_graphreconstruct_from_patches_2dc                  L   [         R                  S S2S S24   S-
  u  p[        U 5      n[        U5      nUR                  UR                  :X  d   e[         R                  R                  UR                  UR                  S:     UR                  UR                  S:     5        g )N   
   r   )npmgridr	   nnztestingassert_array_equaldata)xygrad_xgrad_ys       ^/var/www/html/venv/lib/python3.13/site-packages/sklearn/feature_extraction/tests/test_image.pytest_img_to_graphr      s    88BQBFb DA!_F!_F::### JJ!!FKK!O$fkk&++/&B    c                  F   [         R                  " S[        S9n SU S'   SU S S 2S4'   [         R                  " S5      nSUS'   SUS'   SUS	'   [        XS
9R	                  5       n[         R
                  " / SQ/ SQ/ SQ/5      n[         R                  R                  X#5        g )N      dtype   r   r   r   )r   r   r!   r   maskr!   r   r   )r   r#   r!   )r   r!   r$   )r   zerosboolr	   todensearrayr   r   )r'   r   r   desireds       r   test_img_to_graph_sparser.       s     88F$'DDJDAJ
AAdGAdGAdG!'//1Fhh	:z:;GJJ!!&2r   c                     Sn Sn[         R                  " X 4[        S9nSUSU2SU24'   SX!* S 2U* S 24'   UR                  U S-  5      n[	        X U[         R
                  S9n[        U5      S   S:X  d   e[         R                  " S[        S9nSUS'   SUS S 2S4'   [	        SS	SUR                  5       S
9R                  5       n[         R                  " / SQ/ SQ/ SQ/5      n[         R                  R                  XE5        [         R                  " X 4[         R                  S9n[	        X XS9n[        U5      S   S:X  d   e[         R                  " X 45      n[	        X X[        S9nUR                  [        :X  d   e[	        X X[        S9nUR                  [        :X  d   e[	        X X[         R                   S9nUR                  [         R                   :X  d   eg )Nr   r!   r   Tr   )n_xn_yr'   	return_asr   r"   r   r&   r(   )r   r!   r!   )r0   r1   n_zr'   )r0   r1   r3   r'   r    )r   r)   r*   reshaper   ndarrayr   ravelr+   r,   r   r   onesint16r    intfloat64)sizeroi_sizer'   Agraphr-   s         r   test_grid_to_graphr?   /   s   DH 88TL-D#'D8QxZ	 #'DhYZ	 <<a D$trzzJA"1%*** 88F$'DDJDAJ!Q

5==?Ehh	9i89GJJ!!%1 77D<rxx0D$d>A"1%*** 77D< D$dTJA77d??$dSIA77c>>$dRZZPA77bjj   r   c                     U nUS S S2S S S24   nS H;  nX:  n[        XS9n[        R                  " U5      S   [        U5      S   :X  a  M;   e   g )Nr   )2      r&   r!   r   )r	   r   labelr   )raccoon_face_fxtfacethrr'   r>   s        r   test_connect_regionsrG   S   s^    D!SqS>DzT-}}T"1%)=e)DQ)GGGG r   c                 8   U nUS S S2S S S24   nUS:  n[        UR                  SU06n[        R                  " U5      S   [	        U5      S   :X  d   eUS:  n[        UR                  US S.6n[        R                  " U5      S   [	        U5      S   :X  d   eg )Nr   rA   r'   r!   r   rB   )r'   r    )r   shaper   rC   r   )rD   rE   r'   r>   s       r   test_connect_regions_with_gridrJ   ]   s    D !SqS>D"9D4::1D1E==q!%9%%@%CCCC#:D4::D=E==q!%9%%@%CCCCr   c                 .   U nUS S S2S S S24   USS S2S S S24   -   US S S2SS S24   -   USS S2SS S24   -   nUS S S2S S S24   USS S2S S S24   -   US S S2SS S24   -   USS S2SS S24   -   nUR                  [        R                  5      nUS-  nU$ )Nr   r!   g      0@)astyper   float32)rD   rE   s     r   downsampled_facerN   l   s    D!SqS>DAssO+d3Q319o=QTT14a4Z@PPD!SqS>DAssO+d3Q319o=QTT14a4Z@PPD;;rzz"DDLDKr   c                     U n[         R                  " UR                  S-   5      nSU-
  US S 2S S 2S4'   SUS-  -
  US S 2S S 2S4'   SUS-  -
  US S 2S S 2S4'   U$ )Nr      r   r   r!   r   r   r)   rI   )rN   rE   
face_colors      r   orange_facerT   v   sh    D$**t+,J*Jq!Qwq.Jq!Qwq.Jq!Qwr   c                 t    [         R                  " SU R                  -   5      nXS'   U S-   US'   U S-   US'   U$ )NrP   r   r!   r   rR   )rE   imagess     r   _make_imagesrW      s?    XXdTZZ'(F1IqF1IqF1IMr   c                     [        U 5      $ N)rW   )rN   s    r   downsampled_face_collectionrZ      s    ())r   c                     U nUR                   u  p#Su  pEX$-
  S-   X5-
  S-   -  n[        XU45      nUR                   XdU4:X  d   eg )N   r]   r!   rI   r   rN   rE   i_hi_wp_hp_wexpected_n_patchespatchess           r   test_extract_patches_allrf      sV    DzzHCHC)a-CIM: Sz2G==/c::::r   c                     U nUR                   S S u  p#Su  pEX$-
  S-   X5-
  S-   -  n[        XU45      nUR                   XdUS4:X  d   eg )Nr   r\   r!   r   r^   )rT   rE   r`   ra   rb   rc   rd   re   s           r   test_extract_patches_all_colorrh      s^    Dzz"1~HCHC)a-CIM: Sz2G==/c1====r   c                     U nUS S 2SS24   nUR                   u  p#Su  pEX$-
  S-   X5-
  S-   -  n[        XU45      nUR                   XdU4:X  d   eg )N    a   )r]      r!   r^   r_   s           r   test_extract_patches_all_rectrm      sg    D2b5>DzzHCHC)a-CIM: Sz2G==/c::::r   c                    U nUR                   u  p#Su  pE[        XU4SS9nUR                   SXE4:X  d   e[        SX$-
  S-   -  X5-
  S-   -  5      n[        XU4SS9nUR                   XtU4:X  d   e[        R                  " [
        5         [        XU4SS9  S S S 5        [        R                  " [
        5         [        XU4SS9  S S S 5        g ! , (       d  f       N>= f! , (       d  f       g = f)Nr\   d   max_patches      ?r!   g       @g      )rI   r   r9   pytestraises
ValueError)rN   rE   r`   ra   rb   rc   re   rd   s           r    test_extract_patches_max_patchesrv      s    DzzHCHC SzsCG==S#O+++SCIM2ci!mDE SzsCG==/c::::	z	"4s= 
#	z	"4s> 
#	" 
#	"	"	"s   
C9C 
C 
C.c                 Z    U n[        XR                  SS9nUR                  S   S:X  d   eg )Nr   rp   r   r!   )r   rI   )rN   rE   re   s      r   "test_extract_patch_same_size_imagerx      s0    D !zzqAG==q   r   c                     U nUR                   u  p#SU-  S-  SU-  S-  pTX$-
  S-   X5-
  S-   -  n[        XU4SS9nUR                   XdU4:X  d   eg )Nr   r   r!   i  rp   r^   r_   s           r   *test_extract_patches_less_than_max_patchesrz      sh    DzzHC3w!|QW\)a-CIM: SztDG==/c::::r   c                     U nSu  p#[        XU45      n[        XAR                  5      n[        R                  R                  X5        g Nr\   r   r
   rI   r   r   assert_array_almost_equal)rN   rE   rb   rc   re   face_reconstructeds         r    test_reconstruct_patches_perfectr      s=    DHC Sz2G4WjjIJJ((Br   c                     U nSu  p#[        XU45      n[        XAR                  5      n[        R                  R                  X5        g r|   r}   )rT   rE   rb   rc   re   r   s         r   &test_reconstruct_patches_perfect_colorr      s=    DHC Sz2G4WjjIJJ((Br   c                 J    U n[        SSUS9nX3R                  U5      :X  d   eg )N   r   ro   
patch_sizerq   random_state)r   fit)rZ   global_random_seedfacesextrs       r   test_patch_extractor_fitr      s/    'Es9KD 88E?"""r   c                 d   U nUR                   SS u  p4Su  pVSn[        U5      U-  n[        XV4XqS9n	U	R                  U5      n
U
R                   XU4:X  d   eSn[        U5      [	        X5-
  S-   XF-
  S-   -  U-  5      -  n[        XV4XqS9n	U	R                  U5      n
U
R                   XU4:X  d   eg )Nr!   r   r   ro   r   rr   )rI   lenr   	transformr9   )rZ   r   r   r`   ra   rb   rc   rq   rd   r   re   s              r    test_patch_extractor_max_patchesr      s    'E{{1QHCHCKUk1:;D nnU#G==/c::::KUc	Q39q=)K7'  :;D nnU#G==/c::::r   c                     U n[        SUS9nUR                  U5      nUR                  [        U5      S-  SS4:X  d   eg )Nro   )rq   r         )r   r   rI   r   )rZ   r   r   r   re   s        r   (test_patch_extractor_max_patches_defaultr     sF     (Ec8JKDnnU#G==SZ#-r26666r   c                     U nUR                   SS u  p4Su  pV[        U5      X5-
  S-   -  XF-
  S-   -  n[        XV4US9nUR                  U5      n	U	R                   XuU4:X  d   eg Nr!   r   r   )r   r   )rI   r   r   r   )
rZ   r   r   r`   ra   rb   rc   rd   r   re   s
             r    test_patch_extractor_all_patchesr     su    'E{{1QHCHCUsy1}5QGcZ>PQDnnU#G==/c::::r   c                     [        U 5      nUR                  SS u  p4Su  pV[        U5      X5-
  S-   -  XF-
  S-   -  n[        XV4US9nUR	                  U5      n	U	R                  XuUS4:X  d   eg r   )rW   rI   r   r   r   )
rT   r   r   r`   ra   rb   rc   rd   r   re   s
             r   test_patch_extractor_colorr     s|    %E{{1QHCHCUsy1}5QGcZ>PQDnnU#G==/c1====r   c                  \   / SQn / SQn/ SQn/ SQn/ SQn/ SQn/ SQn/ SQn/ S	Qn/ S
Qn	/ SQn
/ SQn/ SQn/ SQn/ SQnX-   U
-   nX-   U-   nX'-   U-   nX8-   U-   nXI-   U-   n[        UUUUU5       H  u  nnnnn[        R                  " [        R                  " U5      5      R	                  U5      n[        UUUS9n[        U5      nUR                  S U U:X  d   e[        S [        UU5       5       5      nUSU-     UU   R                  5       :H  R                  5       (       a  M   e   g )N)r   r   )   r   )r!   r   rP   r   )r   r   )r   r   )r   )	   rP   r   )r   r   r   r   )r      r   r   )r   r   ))r   r   )r   r   )r   r   )   r   ))   r   )r   r   )r   r   )r   r   ))r   r   r%   )r!   r   )r   r   ))r      )r   r   )r   r   )r      ))r   r   r   )r   r   r      r   r   r   ))r   r   r   r   r   r   )r!   r   r   )r!   r   r   ))r!   r   r   r!   r!   r!   )r   r!   r   )r   r   r   ))r   r   r!   r   )r   r   r   )r   r   r   ))r   r   r   r   )r   r!   r   )r   r   r   )patch_shapeextraction_stepc              3   D   #    U  H  u  p[        XU-   S 5      v   M     g 7frY   )slice).0ijs      r   	<genexpr>/test_extract_patches_strided.<locals>.<genexpr>F  s$      "
.IdaE!UD!!.Is    )r#   NN)zipr   arangeprodr4   r   r   rI   tuplesqueezeall)image_shapes_1Dpatch_sizes_1Dpatch_steps_1Dexpected_views_1Dlast_patch_1Dimage_shapes_2Dpatch_sizes_2Dpatch_steps_2Dexpected_views_2Dlast_patch_2Dimage_shapes_3Dpatch_sizes_3Dpatch_steps_3Dexpected_views_3Dlast_patch_3Dimage_shapespatch_sizespatch_stepsexpected_viewslast_patchesimage_shaper   
patch_stepexpected_view
last_patchimagere   ndimlast_patch_slicess                                r   test_extract_patches_stridedr     sl   2O-N-N1-M>O9N6N87MBOANBND@M"4FL 1NBK 1NBK&:=NNN 0=@LJMk;KFZ]J 		"''+./77D"z:
 ;}}Ud#}444! "
.1*j.I"
 
 $t+,6G0H0P0P0RR
#% 	 Kr   c                     U nUR                   u  p#SnX$-
  S-   X4-
  S-   4n[        XS9nUR                   US   US   XD4:X  d   eg )Nr   r!   )r   r   )rI   r   )rN   rE   r`   ra   prd   re   s          r   test_extract_patches_squarer   N  s]    DzzHC	A7Q;#'A+7t3G==/24Fq4I1PPPPr   c                  B   [         R                  " / SQ/ SQ/ SQ/5      n [        R                  " [        5         [        U S5        S S S 5        [        R                  " [        5         [        U S5        S S S 5        g ! , (       d  f       N>= f! , (       d  f       g = f)N)r!   r   r   )r   r   r   r   )r   r!   )r!   r   )r   r,   rs   rt   ru   r   )r   s    r   test_width_patchr   X  s`    
)Y	23A	z	"1f% 
#	z	"1f% 
#	" 
#	"	"	"s   A?)B?
B
Bc                     [        U 5      nSn[        SS9n[        R                  " [        US9   UR                  U5        SSS5        g! , (       d  f       g= f)zICheck that an informative error is raised if the patch_size is not valid.z*patch_size must be a tuple of two integers)r   r   r   )r   )matchN)rW   r   rs   rt   ru   r   )rT   r   err_msg	extractors       r    test_patch_extractor_wrong_inputr   a  sC    %E:G)4I	z	1E" 
2	1	1s   A
A))numpyr   rs   scipyr   scipy.sparse.csgraphr    sklearn.feature_extraction.imager   r   r   r   r	   r
   r   r.   r?   rG   rJ   fixturerN   rT   rW   rZ   rf   rh   rm   rv   rx   rz   r   r   r   r   r   r   r   r   r   r   r    r   r   <module>r      s       5 
3!!HHD     * *;>;?$!;CC#;07;>,^Q&#r   