
    Mpj3                        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 SK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!\RD                  RG                  S/ SQ5      S 5       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_2d)assert_allclosec                  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       g/var/www/html/pdf-tiff/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"   )r1   r2   n_zr(   )r1   r2   r4   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@   0   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_regionsrH   T   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   rB   r(   r"   r   rC   )r(   r!   )r   shaper   rD   r   )rE   rF   r(   r?   s       r   test_connect_regions_with_gridrK   ^   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)rE   rF   s     r   downsampled_facerO   m   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*   rJ   )rO   rF   
face_colors      r   orange_facerU   w   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$ )NrQ   r   r"   r   rS   )rF   imagess     r   _make_imagesrX      s?    XXdTZZ'(F1IqF1IqF1IMr   c                     [        U 5      $ N)rX   )rO   s    r   downsampled_face_collectionr[      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"   rJ   r   rO   rF   i_hi_wp_hp_wexpected_n_patchespatchess           r   test_extract_patches_allrg      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_   )rU   rF   ra   rb   rc   rd   re   rf   s           r   test_extract_patches_all_colorri      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_rectrn      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      )rJ   r   r:   pytestraises
ValueError)rO   rF   ra   rb   rc   rd   rf   re   s           r    test_extract_patches_max_patchesrw      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   rq   r   r"   )r   rJ   )rO   rF   rf   s      r   "test_extract_patch_same_size_imagery      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  rq   r_   r`   s           r   *test_extract_patches_less_than_max_patchesr{      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
   rJ   r   r   assert_array_almost_equal)rO   rF   rc   rd   rf   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~   )rU   rF   rc   rd   rf   r   s         r   &test_reconstruct_patches_perfect_colorr      s=    DHC Sz2G4WjjIJJ((Br   zimage_size, patch_size)))   rR   r   r   ))rR   r   r   )r   r   ))r   rR   r   r   c                     [         R                  R                  S5      nUR                  " U 6 n[	        X15      n[        X@5      n[        X55        g)zCheck that reconstruct_from_patches_2d works when a patch dimension
equals the corresponding image dimension.

Non-regression test for https://github.com/scikit-learn/scikit-learn/issues/10910
r   N)r   randomRandomStaterandr   r
   r   )
image_size
patch_sizerngimagerf   reconstructeds         r   (test_reconstruct_patches_edge_patch_sizer      sB     ))


"CHHj!E 3G/DME)r   c                 J    U n[        SSUS9nX3R                  U5      :X  d   eg )N   r   rp   r   rr   random_state)r   fit)r[   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   rp   r   rs   )rJ   lenr   	transformr:   )r[   r   r   ra   rb   rc   rd   rr   re   r   rf   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 )Nrp   )rr   r         )r   r   rJ   r   )r[   r   r   r   rf   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   )rJ   r   r   r   )
r[   r   r   ra   rb   rc   rd   re   r   rf   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   )rX   rJ   r   r   r   )
rU   r   r   ra   rb   rc   rd   re   r   rf   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   rQ   r   )r   r   )r   r   )r   )	   rQ   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rZ   )slice).0ijs      r   	<genexpr>/test_extract_patches_strided.<locals>.<genexpr>]  s$      "
.IdaE!UD!!.Is    )r$   NN)zipr   arangeprodr5   r   r   rJ   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_patchr   rf   ndimlast_patch_slicess                                r   test_extract_patches_stridedr   6  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   )rJ   r   )rO   rF   ra   rb   pre   rf   s          r   test_extract_patches_squarer   e  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-   rt   ru   rv   r   )r   s    r   test_width_patchr   o  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)rX   r   rt   ru   rv   r   )rU   r   err_msg	extractors       r    test_patch_extractor_wrong_inputr   x  sC    %E:G)4I	z	1E" 
2	1	1s   A
A).numpyr   rt   scipyr   scipy.sparse.csgraphr    sklearn.feature_extraction.imager   r   r   r   r	   r
   sklearn.utils._testingr   r   r/   r@   rH   rK   fixturerO   rU   rX   r[   rg   ri   rn   rw   ry   r{   r   r   markparametrizer   r   r   r   r   r   r   r   r   r    r   r   <module>r      s      5  3
3!!HHD     * *;>;?$!;CC 
*
*#;07;>,^Q&#r   