ó
‡ˆ\c           @   s  d  Z  d d l Z d d l Z d d l Z 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 d d l m Z d d l m Z d d l m Z d d	 l m Z d d
 l m Z d d l m Z d d l m Z e j d d ƒ Z e j d d ƒ Z e j j e d ƒ Z d d d d d d d g Z d „  Z d „  Z  d „  Z! d „  Z" d „  Z# d „  Z$ d „  Z% d S(   sv  This test for the LFW require medium-size data downloading and processing

If the data has not been already downloaded by running the examples,
the tests won't run (skipped).

If the test are run, the first execution will be long (typically a bit
more than a couple of minutes) but as the dataset loader is leveraging
joblib, successive runs will be fast (less than 200ms).
iÿÿÿÿN(   t   partial(   t   six(   t   pillow_installedt   imsave(   t   fetch_lfw_pairs(   t   fetch_lfw_people(   t   assert_array_equal(   t   assert_equal(   t   SkipTest(   t   assert_raises(   t   check_return_X_yt   prefixt   scikit_learn_lfw_test_t   scikit_learn_empty_test_t   lfw_homet   Abdelatif_Smitht   Abhati_Keplert   Camara_Alvarot   Chen_Dupontt   John_Leet
   Lin_Baumant
   Onur_Lopezc          C   si  t  s t d ƒ ‚ n  t j j t ƒ s7 t j t ƒ n  t j d ƒ }  t	 j j
 d ƒ } i  } xá t D]Ù } t j j t d | ƒ } t j j | ƒ s¥ t j | ƒ n  | j d d ƒ } | | | <xz t | ƒ D]l } t j j | | d | ƒ } | j d d d	 d ƒ} y t | | ƒ WqÎ t k
 r9t d ƒ ‚ qÎ XqÎ Wqe Wt t j j t d d ƒ d ƒ  }	 |	 j t j d ƒ ƒ Wd QXt t j j t d ƒ d ƒ I}	 |	 j t j d ƒ ƒ g  t j | ƒ D] \ } }
 |
 d k rÉ| ^ qÉ} xh t d ƒ D]Z } |  j | ƒ } |  j t | | ƒ d ƒ \ } } |	 j t j d | | | f ƒ ƒ qúWxŠ t d ƒ D]| } |  j t d ƒ \ } } |  j t	 j | | ƒ ƒ } |  j t	 j | | ƒ ƒ } |	 j t j d | | | | f ƒ ƒ qeWWd QXt t j j t d ƒ d ƒ  }	 |	 j t j d ƒ ƒ Wd QXt t j j t d ƒ d ƒ  }	 |	 j t j d ƒ ƒ Wd QXd S(   s<   Test fixture run once and common to all tests of this modules   PIL not installed.i*   t   lfw_funneledi   i   s	   _%04d.jpgi    iÿ   t   sizeiú   i   s   PIL not installeds	   .test.swpt   wbs.   Text file to be ignored by the dataset loader.Ns   pairsDevTrain.txts   10
i   s	   %s	%d	%d
s   %s	%d	%s	%d
s   pairsDevTest.txts&   Fake place holder that won't be testeds	   pairs.txt(   iú   iú   i   (   R   R   t   ost   patht   existst   LFW_HOMEt   makedirst   randomt   Randomt   npt   RandomStatet
   FAKE_NAMESt   joint   randintt   rangeR   t   ImportErrort   opent   writeR   t   bt	   iteritemst   choicet   samplet   arange(   t   random_statet   np_rngt   countst   namet   folder_namet   n_facest   it	   file_patht   unifacet   ft   countt   more_than_twot   firstt   secondt
   first_namet   second_namet   first_indext   second_index(    (    s>   lib/python2.7/site-packages/sklearn/datasets/tests/test_lfw.pyt   setup_module,   sP    
$!"'!!c           C   sH   t  j j t ƒ r" t j t ƒ n  t  j j t ƒ rD t j t ƒ n  d S(   s?   Test fixture (clean up) run once after all tests of this moduleN(   R   R   t   isdirt   SCIKIT_LEARN_DATAt   shutilt   rmtreet   SCIKIT_LEARN_EMPTY_DATA(    (    (    s>   lib/python2.7/site-packages/sklearn/datasets/tests/test_lfw.pyt   teardown_moduled   s    c           C   s   t  t t d t d t ƒd  S(   Nt	   data_homet   download_if_missing(   R	   t   IOErrorR   RE   t   False(    (    (    s>   lib/python2.7/site-packages/sklearn/datasets/tests/test_lfw.pyt   test_load_empty_lfw_peoplel   s    c          C   sk  t  d t d d d t ƒ }  t |  j j d ƒ t |  j j d ƒ t |  j d	 d
 d d
 d	 d
 d	 d d d	 g
 ƒ d d d g } t |  j	 | ƒ t  d t d d  d d  d t d t ƒ }  t |  j j d ƒ t |  j d
 d
 d d d d d d d
 d d d d	 d d d d	 g ƒ t |  j	 d d d d d d d g ƒ t t  d t d d  d d  d t d t ƒ} t |  | ƒ d  S(   NRG   t   min_faces_per_personi   RH   i
   i>   i/   ib  i   i    i   s   Abdelatif Smiths   Abhati Keplers
   Onur Lopezt   resizet   slice_t   colori   iú   i   i   i   s   Camara Alvaros   Chen Duponts   John Lees
   Lin Bauman(   i
   i>   i/   (   i
   ib  (   i   iú   iú   i   (   R   RB   RJ   R   t   imagest   shapet   dataR   t   targett   target_namest   Nonet   TrueR    R
   (   t
   lfw_peoplet   expected_classest
   fetch_func(    (    s>   lib/python2.7/site-packages/sklearn/datasets/tests/test_lfw.pyt   test_load_fake_lfw_peopleq   s,    	.		:			c        	   C   s#   t  t t d t d d d t ƒd  S(   NRG   RL   id   RH   (   R	   t
   ValueErrorR   RB   RJ   (    (    (    s>   lib/python2.7/site-packages/sklearn/datasets/tests/test_lfw.pyt)   test_load_fake_lfw_people_too_restrictive˜   s    c           C   s   t  t t d t d t ƒd  S(   NRG   RH   (   R	   RI   R   RE   RJ   (    (    (    s>   lib/python2.7/site-packages/sklearn/datasets/tests/test_lfw.pyt   test_load_empty_lfw_pairs   s    c          C   sî   t  d t d t ƒ }  t |  j j d ƒ t |  j d d d d d d d d d d g
 ƒ d	 d
 g } t |  j | ƒ t  d t d d  d d  d t
 d t ƒ }  t |  j j d ƒ t |  j d d d d d d d d d d g
 ƒ t |  j | ƒ d  S(   NRG   RH   i
   i   i>   i/   i   i    s   Different personss   Same personRM   RN   RO   iú   i   (   i
   i   i>   i/   (   i
   i   iú   iú   i   (   R   RB   RJ   R   t   pairsRQ   R   RS   RT   RU   RV   (   t   lfw_pairs_trainRX   (    (    s>   lib/python2.7/site-packages/sklearn/datasets/tests/test_lfw.pyt   test_load_fake_lfw_pairs£   s    	.	.(&   t   __doc__R   R   RC   t   tempfilet   numpyR    t	   functoolsR    t   sklearn.externalsR   t   sklearn.externals._pilutilR   R   t   sklearn.datasetsR   R   t   sklearn.utils.testingR   R   R   R	   t"   sklearn.datasets.tests.test_commonR
   t   mkdtempRB   RE   R   R#   R   R"   R@   RF   RK   RZ   R\   R]   R`   (    (    (    s>   lib/python2.7/site-packages/sklearn/datasets/tests/test_lfw.pyt   <module>	   s@   		8			'		