
    0Ph1/                     8   d dl Zd dlZd dlmZ d dlmZ d dlmZm	Z	m
Z
mZmZmZ d Zd Zd Zd Zd	 Zej        d
             Zej        d             Zd Zej        d             Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(dS )    N)ndimage)connected_components)PatchExtractor_extract_patchesextract_patches_2dgrid_to_graphimg_to_graphreconstruct_from_patches_2dc                  2   t           j        d dd df         dz
  \  } }t          |           }t          |          }|j        |j        k    sJ t           j                            |j        |j        dk             |j        |j        dk                        d S )N   
   r   )npmgridr	   nnztestingassert_array_equaldata)xygrad_xgrad_ys       k/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/sklearn/feature_extraction/tests/test_image.pytest_img_to_graphr      s    8BQBFb DAq!__F!__F:#### J!!FK!O$fk&+/&B        c                  ^   t          j        dt                    } d| d<   d| d d df<   t          j        d          }d|d<   d|d<   d|d	<   t          || 
                                          }t          j        g dg dg dg          }t           j                            ||           d S )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     8F$'''DDJDAJ
AAdGAdGAdG!$'''//11Fh			:::zzz:;;GJ!!&'22222r   c                  4   d} d}t          j        | | ft                    }d|d|d|f<   d|| d | d f<   |                    | dz            }t	          | | |t           j                  }t          |          d         dk    sJ t          j        dt                    }d|d<   d|d d df<   t	          dd	d|                                
                                          }t          j	        g dg dg dg          }t           j
                            ||           t          j        | | ft           j                  }t	          | | | |          }t          |          d         dk    sJ t          j        | | f          }t	          | | | |t                    }|j        t          k    sJ t	          | | | |t                    }|j        t          k    sJ t	          | | | |t           j                  }|j        t           j        k    sJ d S )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 8T4L---D#'D8QxZ	 #'D(hYZZ	 <<a  D$DtrzJJJA""1%**** 8F$'''DDJDAJ!Q

555==??Eh			999iii899GJ!!%111 7D$<rx000D$Dd>>>A""1%**** 7D$<  D$DdTJJJA7d????$DdSIIIA7c>>>>$DdRZPPPA7bj      r   c                     | }|d d dd d df         }dD ]L}||k    }t          ||          }t          j        |          d         t          |          d         k    sJ Md S )Nr   )2      r&   r!   r   )r	   r   labelr   )raccoon_face_fxtfacethrr'   r>   s        r   test_connect_regionsrG   S   s    D!SSqS>D H HczT---}T""1%)=e)D)DQ)GGGGGGH Hr   c                 T   | }|d d dd d df         }|dk    }t          |j        d|i}t          j        |          d         t	          |          d         k    sJ |dk    }t          |j        |d d}t          j        |          d         t	          |          d         k    sJ d S )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 !SSqS>D"9D4:1D11E=q!%9%%@%@%CCCCC#:D4:D===E=q!%9%%@%@%CCCCCCCr   c                 ^   | }|d d dd d df         |dd dd d df         z   |d d ddd df         z   |dd ddd df         z   }|d d dd d df         |dd dd d df         z   |d d ddd df         z   |dd ddd df         z   }|                     t          j                  }|dz  }|S )Nr   r!   g      0@)astyper   float32)rD   rE   s     r   downsampled_facerN   l   s    D!SSqS>DAsssO+d33Q319o=QTT14a4Z@PPD!SSqS>DAsssO+d33Q319o=QTT14a4Z@PPD;;rz""DDLDKr   c                     | }t          j        |j        dz             }d|z
  |d d d d df<   d|dz  z
  |d d d d df<   d|dz  z
  |d d d d df<   |S )Nr      r   r   r!   r   r   r)   rI   )rN   rE   
face_colors      r   orange_facerT   v   s    D$*t+,,J*Jqqq!!!Qwq.Jqqq!!!Qwq.Jqqq!!!Qwr   c                 h    t          j        d| j        z             }| |d<   | dz   |d<   | dz   |d<   |S )NrP   r   r!   r   rR   )rE   imagess     r   _make_imagesrW      s@    XdTZ'((FF1IqF1IqF1IMr   c                      t          |           S N)rW   )rN   s    r   downsampled_face_collectionrZ      s    ()))r   c                     | }|j         \  }}d\  }}||z
  dz   ||z
  dz   z  }t          |||f          }|j         |||fk    sJ d S )N   r]   r!   rI   r   rN   rE   i_hi_wp_hp_wexpected_n_patchespatchess           r   test_extract_patches_allrf      sj    DzHCHC)a-C#IM: Sz22G=/c:::::::r   c                     | }|j         d d         \  }}d\  }}||z
  dz   ||z
  dz   z  }t          |||f          }|j         |||dfk    sJ d S )Nr   r\   r!   r   r^   )rT   rE   r`   ra   rb   rc   rd   re   s           r   test_extract_patches_all_colorrh      st    Dz"1"~HCHC)a-C#IM: Sz22G=/c1=======r   c                     | }|d d ddf         }|j         \  }}d\  }}||z
  dz   ||z
  dz   z  }t          |||f          }|j         |||fk    sJ d S )N    a   )r]      r!   r^   r_   s           r   test_extract_patches_all_rectrm      s    D2b5>DzHCHC)a-C#IM: Sz22G=/c:::::::r   c                    | }|j         \  }}d\  }}t          |||fd          }|j         d||fk    sJ t          d||z
  dz   z  ||z
  dz   z            }t          |||fd          }|j         |||fk    sJ t          j        t
                    5  t          |||fd           d d d            n# 1 swxY w Y   t          j        t
                    5  t          |||fd           d d d            d S # 1 swxY w Y   d S )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zHCHC SzsCCCG=S#sO++++SC#IM2cCi!mDEE SzsCCCG=/c:::::	z	"	" > >4#s====> > > > > > > > > > > > > > >	z	"	" ? ?4#s>>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?s$   B55B9<B9C;;C?C?c                 ^    | }t          ||j        d          }|j        d         dk    sJ d S )Nr   rp   r   r!   )r   rI   )rN   rE   re   s      r   "test_extract_patch_same_size_imagerx      s=    D !tzqAAAG=q      r   c                     | }|j         \  }}d|z  dz  d|z  dz  }}||z
  dz   ||z
  dz   z  }t          |||fd          }|j         |||fk    sJ d S )Nr   r   r!   i  rp   r^   r_   s           r   *test_extract_patches_less_than_max_patchesrz      s    DzHC3w!|QW\C)a-C#IM: SztDDDG=/c:::::::r   c                     | }d\  }}t          |||f          }t          ||j                  }t          j                            ||           d S Nr\   r   r
   rI   r   r   assert_array_almost_equal)rN   rE   rb   rc   re   face_reconstructeds         r    test_reconstruct_patches_perfectr      sT    DHC Sz22G4WdjIIJ((/ABBBBBr   c                     | }d\  }}t          |||f          }t          ||j                  }t          j                            ||           d S r|   r}   )rT   rE   rb   rc   re   r   s         r   &test_reconstruct_patches_perfect_colorr      sT    DHC Sz22G4WdjIIJ((/ABBBBBr   c                 d    | }t          ddd          }||                    |          k    sJ d S )N   r   ro   r   
patch_sizerq   random_state)r   fit)rZ   facesextrs      r   test_patch_extractor_fitr      s<    'EV1MMMD488E??""""""r   c                    | }|j         dd         \  }}d\  }}d}t          |          |z  }t          ||f|d          }|                    |          }	|	j         |||fk    sJ d}t          |          t	          ||z
  dz   ||z
  dz   z  |z            z  }t          ||f|d          }|                    |          }	|	j         |||fk    sJ d S )Nr!   r   r   ro   r   r   rr   )rI   lenr   	transformr9   )
rZ   r   r`   ra   rb   rc   rq   rd   r   re   s
             r    test_patch_extractor_max_patchesr      s   'E{1Q3HCHCKUk1:;Q  D nnU##G=/c:::::KUc	sQ39q=)K7' '  :;Q  D nnU##G=/c:::::::r   c                     | }t          dd          }|                    |          }|j        t          |          dz  ddfk    sJ d S )Nro   r   )rq   r         )r   r   rI   r   )rZ   r   r   re   s       r   (test_patch_extractor_max_patches_defaultr      sU    'Ec:::DnnU##G=SZZ#-r26666666r   c                     | }|j         dd         \  }}d\  }}t          |          ||z
  dz   z  ||z
  dz   z  }t          ||fd          }|                    |          }|j         |||fk    sJ d S Nr!   r   r   r   )r   r   )rI   r   r   r   )	rZ   r   r`   ra   rb   rc   rd   r   re   s	            r    test_patch_extractor_all_patchesr     s    'E{1Q3HCHCUsSy1}5sQGc3Za@@@DnnU##G=/c:::::::r   c                    t          |           }|j        dd         \  }}d\  }}t          |          ||z
  dz   z  ||z
  dz   z  }t          ||fd          }|                    |          }|j        |||dfk    sJ d S r   )rW   rI   r   r   r   )	rT   r   r`   ra   rb   rc   rd   r   re   s	            r   test_patch_extractor_colorr     s    %%E{1Q3HCHCUsSy1}5sQGc3Za@@@DnnU##G=/c1=======r   c                     g d} g d}g d}g d}g d}g d}g d}g d}g d	}g d
}	g d}
g d}g d}g d}g d}| |z   |
z   }||z   |z   }||z   |z   }||z   |z   }||	z   |z   }t          |||||          D ]\  }}}}}t          j        t          j        |                                        |          }t          |||          }t          |          }|j        d |         |k    sJ t          d t          ||          D                       }|d|z           ||         	                                k    
                                sJ d S )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   K   | ]\  }}t          |||z   d           V  d S rY   )slice).0ijs      r   	<genexpr>z/test_extract_patches_strided.<locals>.<genexpr>B  sG       "
 "
&*aE!QUD!!"
 "
 "
 "
 "
 "
r   )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     s   222O---N---N111---M>>>O999N666N888777MBBBOAAANBBBNDDD@@@M"_4FL >1NBK >1NBK&)::=NNN =0=@LJMk;K K  FZ]J 	"'+..//77DD"z:
 
 
 ;}UdU#}4444! "
 "
.1*j.I.I"
 "
 "
 
 
 $t+,6G0H0P0P0R0RR
#%%	 	 	 	 r   c                     | }|j         \  }}d}||z
  dz   ||z
  dz   f}t          ||          }|j         |d         |d         ||fk    sJ d S )Nr   r!   )r   r   )rI   r   )rN   rE   r`   ra   prd   re   s          r   test_extract_patches_squarer   J  sr    DzHC	A7Q;#'A+7t333G=/24Fq4I1aPPPPPPPr   c                  F   t          j        g dg dg dg          } t          j        t                    5  t          | d           d d d            n# 1 swxY w Y   t          j        t                    5  t          | d           d d d            d S # 1 swxY w Y   d S )N)r!   r   r   )r   r   r   r   )r   r!   )r!   r   )r   r,   rs   rt   ru   r   )r   s    r   test_width_patchr   T  s   
)))YYY			233A	z	"	" & &1f%%%& & & & & & & & & & & & & & &	z	"	" & &1f%%%& & & & & & & & & & & & & & & & & &s#   AAA8BBBc                     t          |           }d}t          d          }t          j        t          |          5  |                    |           ddd           dS # 1 swxY w Y   dS )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   ]  s    %%E:G)444I	z	1	1	1 # #E"""# # # # # # # # # # # # # # # # # #s   A  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 5 5 5 5 5               
 
 
3 3 3!! !! !!HH H HD D D         * * *; ; ;> > >; ; ;? ? ?$! ! !; ; ;C C CC C C# # #; ; ;07 7 7; ; ;> > >, , ,^Q Q Q& & &# # # # #r   