Ë
    ëÿæi²  ã                   ó  — d Z ddlZddlmZ ddlmZ ddlZ	 ddlZ eej                  j                  dd¬«      d   «      Zdd	lmZ dd
lmZmZmZ ddlmZmZ  e ee«      j0                  dz  dz  «      ZdZdZddddœZddddddœZej=                  «       ZejA                  e«       ejB                  d„ «       Z"d„ Z#d„ Z$d„ Z%ejL                  jO                  d e(ejS                  «       «       e(ejU                  «       «      ¬«      d„ «       Z+ejL                  jO                  d e(ejS                  «       «       e(ejU                  «       «      ¬«      d „ «       Z,ejL                  jO                  d e(ejS                  «       «       e(ejU                  «       «      ¬«      d!„ «       Z-d"„ Z.ejL                  jO                  d e(ejS                  «       «       e(ejU                  «       «      ¬«      d#„ «       Z/y# e$ r dZdZY �ŒÄw xY w)$z3
Test the hash calculation and checking functions.
é    N)ÚPath)ÚNamedTemporaryFileÚ.é   )Úmaxsplité   )ÚPooch)Úmake_registryÚ	file_hashÚhash_matches)Úcheck_tiny_dataÚmirror_directoryÚdataÚstorezOtiny-data.txt baee0894dba14b12085eacb204284b97e362f4f3e5a5807693cc90ef415c1b2d
z¥subdir/tiny-data.txt baee0894dba14b12085eacb204284b97e362f4f3e5a5807693cc90ef415c1b2d
tiny-data.txt baee0894dba14b12085eacb204284b97e362f4f3e5a5807693cc90ef415c1b2d
Ú(c03148994acd89317915ea2f2d080d6dd127aa09Ú@baee0894dba14b12085eacb204284b97e362f4f3e5a5807693cc90ef415c1b2dÚ 70e2afd3fd7e336ae478b1e740a5f08e)Úsha1Úsha256Úmd5Úf843815fe57948faÚ98d6f1a2Ú 0267d220db258fffb0c567c0ecd1b689Ú811e3f2a12aec53f)Úxxh64Úxxh32Úxxh128Úxxh3_128Úxxh3_64c                 ó"   — t        t        | «      S )z•
    Mirror the test data folder on a temporary directory. Needed to avoid
    permission errors when pooch is installed on a non-writable path.
    )r   ÚDATA_DIR)Útmp_paths    úl/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/pooch/tests/test_hashes.pyÚdata_dir_mirrorr$   :   s   € ô œH hÓ/Ð/ó    c                 ó6  — t        d¬«      }|j                  «        	 t        | |j                  d¬«       t	        |j                  d¬«      5 }|j                  «       }ddd«       t        k(  sJ ‚t        | di ¬«      }|j                  |j                  «       t        | d	z  «      }|j                  d	«      }||k(  sJ ‚t        |«       t        j                  |j                  «       y# 1 sw Y   ŒŽxY w# t        j                  |j                  «       w xY w)
zGCheck that the registry builder creates the right file names and hashesF©Údelete©Ú	recursiveúutf-8©ÚencodingNúsome bogus URL©ÚpathÚbase_urlÚregistryútiny-data.txt)r   Úcloser
   ÚnameÚopenÚreadÚREGISTRYr	   Úload_registryÚstrÚfetchr   ÚosÚremove)r$   ÚoutfileÚfoutr2   ÚpupÚtrueÚfnames          r#   Útest_make_registryrC   C   sÖ   € ä ¨Ô.€Gà‡M�M„Oð Ü�o w§|¡|¸uÕEÜ�'—,‘,¨Õ1°TØ—y‘y“{ˆH÷ 2àœ8Ò#Ð#Ð#ä˜Ð3CÈbÔQˆØ×Ñ˜'Ÿ,™,Ô'Ü�? _Ñ4Ó5ˆØ—	‘	˜/Ó*ˆØ�uŠ}Ðˆ}Ü˜Ôä
�	‰	�'—,‘,Õ÷ 2Ð1ûô 	�	‰	�'—,‘,Õús$   ž/C7 ÁC+ÁA-C7 Ã+C4Ã0C7 Ã7!Dc                 óÎ  — t        d¬«      }|j                  «        	 t        | |j                  d¬«       t	        |j                  d¬«      5 }|j                  «       }ddd«       t        k(  sJ ‚t        | di ¬	«      }|j                  |j                  «       t        | d
z  «      |j                  d
«      k(  sJ ‚t        |j                  d
«      «       t        | dz  d
z  «      }||j                  d«      k(  sJ ‚t        |j                  d«      «       t        j                  |j                  «       y# 1 sw Y   ŒÚxY w# t        j                  |j                  «       w xY w)z7Check that the registry builder works in recursive modeFr'   Tr)   r+   r,   Nr.   r/   r3   Úsubdirzsubdir/tiny-data.txt)r   r4   r
   r5   r6   r7   ÚREGISTRY_RECURSIVEr	   r9   r:   r;   r   r<   r=   )r$   r>   r?   r2   r@   rA   s         r#   Útest_make_registry_recursiverG   X   s  € ä ¨Ô.€Gà‡M�M„Oð Ü�o w§|¡|¸tÕDÜ�'—,‘,¨Õ1°TØ—y‘y“{ˆH÷ 2àÔ-Ò-Ð-Ð-ä˜Ð3CÈbÔQˆØ×Ñ˜'Ÿ,™,Ô'Ü�? _Ñ4Ó5¸¿¹À?Ó9SÒSÐSÐSÜ˜Ÿ	™	 /Ó2Ô3Ü�? XÑ-°Ñ?Ó@ˆØ�s—y‘yÐ!7Ó8Ò8Ð8Ð8Ü˜Ÿ	™	Ð"8Ó9Ô:ä
�	‰	�'—,‘,Õ÷ 2Ð1ûô 	�	‰	�'—,‘,Õús$   ž/E ÁD7ÁB9E Ä7E Ä<E Å!E$c                  ó¬   — t        j                  t        «      5 } t        dd¬«       ddd«       dt	         j
                  «      v sJ ‚y# 1 sw Y   Œ#xY w)z!Test an invalid hashing algorithmÚ	somethingÚblah)rB   ÚalgNz'blah')ÚpytestÚraisesÚ
ValueErrorr   r:   Úvalue)Úexcs    r#   Ú test_file_hash_invalid_algorithmrQ   n   s>   € ä	�‰”zÔ	" cÜ˜¨Õ0÷ 
#à”s˜3Ÿ9™9“~Ñ%Ð%Ñ%÷ 
#Ð	"ús   šA
Á
Azalg,expected_hash)Úidsc                 ó$  — | j                  d«      r=t        €t        j                  d«       | dvrt        dk  rt        j                  d«       t
        j                  j                  t        d«      }t        |«       t        || «      }||k(  sJ ‚y)z2Test the hash calculation using hashlib and xxhashÚxxhNúrequires xxhash©r   r   r   úrequires xxhash > 2.0r3   )Ú
startswithÚxxhashrL   ÚskipÚXXHASH_MAJOR_VERSIONr<   r0   Újoinr!   r   r   )rK   Úexpected_hashrB   Úreturned_hashs       r#   Útest_file_hashr_   u   sv   € ð ‡~�~�eÔÜˆ>Ü�K‰KÐ)Ô*ØÐ(Ñ(Ô-AÀAÒ-EÜ�K‰KÐ/Ô0Ü�G‰G�L‰Lœ ?Ó3€EÜ�EÔÜ˜e SÓ)€MØ˜MÒ)Ð)Ñ)r%   c                 óN  — | j                  d«      r=t        €t        j                  d«       | dvrt        dk  rt        j                  d«       t
        j                  j                  t        d«      }t        |«       | › d|› �}t        ||«      sJ ‚| › d	�}t        ||«      rJ ‚y)
z*Make sure the hash checking function worksrT   NrU   rV   r   rW   r3   Ú:ú:blablablabla)rX   rY   rL   rZ   r[   r<   r0   r\   r!   r   r   )rK   r]   rB   Ú
known_hashs       r#   Útest_hash_matchesrd   ‡   s›   € ð ‡~�~�eÔÜˆ>Ü�K‰KÐ)Ô*ØÐ(Ñ(Ô-AÀAÒ-EÜ�K‰KÐ/Ô0Ü�G‰G�L‰Lœ ?Ó3€EÜ�EÔà�5˜˜-˜Ð)€JÜ˜˜zÔ*Ð*Ð*à�5˜Ð&€JÜ˜E :Ô.Ð.Ð.Ð.r%   c                 óò  — t         j                  j                  t        d«      }t	        |«       | › d|› �}t        ||d¬«      sJ ‚| › d�}t        j                  t        «      5 }t        ||dd¬«       ddd«       dt        j                  «      v sJ ‚t        j                  t        «      5 }t        ||dd¬«       ddd«       |t        |j                  «      v sJ ‚y# 1 sw Y   ŒmxY w# 1 sw Y   Œ/xY w)	zBMake sure the hash checking function raises an exception if strictr3   ra   T©Ústrictrb   Ú	Neverland©rg   ÚsourceN)r<   r0   r\   r!   r   r   rL   rM   rN   r:   rO   )rK   r]   rB   rc   Úbad_hashÚerrors         r#   Útest_hash_matches_strictrm   �   sÐ   € ô �G‰G�L‰Lœ ?Ó3€EÜ�EÔà�5˜˜-˜Ð)€JÜ˜˜z°$Õ7Ð7Ð7à��mÐ$€HÜ	�‰”zÔ	" eÜ�U˜H¨T¸+ÕF÷ 
#àœ#˜eŸk™kÓ*Ñ*Ð*Ð*Ü	�‰”zÔ	" eÜ�U˜H¨T¸$Õ?÷ 
#à”C˜Ÿ™Ó$Ñ$Ð$Ñ$÷ 
#Ð	"ú÷ 
#Ð	"ús   Á%C!Â/C-Ã!C*Ã-C6c                  ó¨   — t         j                  j                  t        d«      } t	        | d¬«      sJ ‚t	        dd¬«      sJ ‚t	        | dd¬«      sJ ‚y)zHThe hash checking function should always returns True if known_hash=Noner3   N)rc   Ú )rB   rc   T)rc   rg   )r<   r0   r\   r!   r   )rB   s    r#   Útest_hash_matches_nonerp   ³   sH   € ä�G‰G�L‰Lœ ?Ó3€EÜ˜¨$Õ/Ð/Ð/ä˜b¨TÕ2Ð2Ð2ä˜¨$°tÕ<Ð<Ñ<r%   c                 ó^  — t         j                  j                  t        d«      }t	        |«       | › d|j                  «       › �}t        ||d¬«      sJ ‚t        j                  t        «      5 }t        ||dd dd¬«       ddd«       dt        j                  «      v sJ ‚y# 1 sw Y   Œ#xY w)	z:Hash matching should be independent of upper or lower caser3   ra   Trf   Néûÿÿÿrh   ri   )r<   r0   r\   r!   r   Úupperr   rL   rM   rN   r:   rO   )rK   r]   rB   rc   rl   s        r#   Útest_hash_matches_uppercasert   ½   s“   € ô �G‰G�L‰Lœ ?Ó3€EÜ�EÔà�5˜˜-×-Ñ-Ó/Ð0Ð1€JÜ˜˜z°$Õ7Ð7Ð7ä	�‰”zÔ	" eÜ�U˜J s¨˜O°DÀÕM÷ 
#àœ#˜eŸk™kÓ*Ñ*Ð*Ñ*÷ 
#Ð	"ús   Á.B#Â#B,)0Ú__doc__r<   Úpathlibr   Útempfiler   rL   rY   ÚintÚVERSIONÚsplitr[   ÚImportErrorÚcorer	   Úhashesr
   r   r   Úutilsr   r   r:   Ú__file__Úparentr!   r8   rF   ÚTINY_DATA_HASHES_HASHLIBÚTINY_DATA_HASHES_XXHÚcopyÚTINY_DATA_HASHESÚupdateÚfixturer$   rC   rG   rQ   ÚmarkÚparametrizeÚlistÚitemsÚkeysr_   rd   rm   rp   rt   © r%   r#   Ú<module>r�      sZ  ðñó 
Ý Ý 'ã ðÛá˜vŸ~™~×3Ñ3°CÀ!Ð3ÓDÀQÑGÓHÐõ
 ÷ñ ÷
 5á‰t�H‹~×$Ñ$ vÑ-°Ñ7Ó8€àVð 	ðWð ð
 7ØPØ-ñÐ ð  Øà0Ø2Ø!ñÐ ð ,×0Ñ0Ó2Ð Ø × Ñ Ð,Ô -ð ‡�ñ0ó ð0ò ò* ò,&ð ‡�×ÑØÙÐ	×	Ñ	Ó	!Ó"ÙÐ×"Ñ"Ó$Ó%ð ó ñ

*óð

*ð ‡�×ÑØÙÐ	×	Ñ	Ó	!Ó"ÙÐ×"Ñ"Ó$Ó%ð ó ñ
/óð
/ð" ‡�×ÑØÙÐ	!×	'Ñ	'Ó	)Ó*ÙÐ%×*Ñ*Ó,Ó-ð ó ñ
%óð
%ò"=ð ‡�×ÑØÙÐ	!×	'Ñ	'Ó	)Ó*ÙÐ%×*Ñ*Ó,Ó-ð ó ñ

+óñ

+øð[ ò Ø€FØÓðús   ˜*G: Ç:	HÈH