ó
    Ñ]jì  ã                  óN  • S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
r
S SKJr  S SKJr  S SKJr  S SKJr  \" \	R&                  5      rSrSrS	rS
rSrSrSrSr\" \\\\45      r\" \\45      r\" \\45      r1 \k\k\kr\R@                  " \RB                  RE                  5       6   \R@                  " \RF                  RE                  5       6   \R@                  " \RH                  RE                  5       6   \R@                  " \RJ                  RE                  5       6   \" \5      r&SS jr'SS jr(SS jr)SS jr*SS jr+S S jr,      S!S jr-S"S jr.S#S jr/\R`                  " S\Rb                  \Rd                  -  5      r3\R`                  " S5      r4S$S jr5S%S jr6g)&é    )ÚannotationsN)ÚIO)Ú
extensions)Úinterpreters)ÚlicensesÚ	directoryÚsymlinkÚsocketÚfileÚ
executableznon-executableÚtextÚbinaryc                ó  •  [         R                  " U 5      nUR                  n[
        R                  " U5      (       a  [        1$ [
        R                  " U5      (       a  [        1$ [
        R                  " U5      (       a  [        1$ [        1n[         R                  " U [         R                  5      nU(       a  UR                  [         5        OUR                  ["        5        [%        [         R&                  R)                  U 5      5      n[+        U5      S:”  a  UR-                  U5        O>U(       a7  [/        U 5      n[+        U5      S:”  a  UR-                  [1        US   5      5        [2        U-  (       d;  [5        U 5      (       a  UR                  [6        5        OUR                  [8        5        [2        U-  (       d   U5       e[:        U-  (       d   U5       eU$ ! [        [        4 a    [        U  S35      ef = f)Nú does not exist.r   )ÚosÚlstatÚOSErrorÚ
ValueErrorÚst_modeÚstatÚS_ISDIRÚ	DIRECTORYÚS_ISLNKÚSYMLINKÚS_ISSOCKÚSOCKETÚFILEÚaccessÚX_OKÚaddÚ
EXECUTABLEÚNON_EXECUTABLEÚtags_from_filenameÚpathÚbasenameÚlenÚupdateÚparse_shebang_from_fileÚtags_from_interpreterÚENCODING_TAGSÚfile_is_textÚTEXTÚBINARYÚ	MODE_TAGS)r$   ÚsrÚmodeÚtagsr   ÚtÚshebangs          ÚN/home/mande/repo/quber/.venv/lib/python3.13/site-packages/identify/identify.pyÚtags_from_pathr5   (   sz  € ð4Ü�XŠX�d‹^ˆð �:‰:€DÜ‡|‚|�D×ÑÜˆ{ÐÜ‡|‚|�D×ÑÜˆyÐÜ‡}‚}�T×ÑÜˆxˆäˆ6€Dä—’˜4¤§¡Ó)€JÞØ�‰”Õà�‰”Ô ô 	œ2Ÿ7™7×+Ñ+¨DÓ1Ó2€AÜ
ˆ1ƒv�ƒzØ�‰�A�æÜ-¨dÓ3ˆGÜ�7‹|˜aÓØ—‘Ô1°'¸!±*Ó=Ô>ô ˜4×Ü˜×ÑØ�H‰H”T�Nà�H‰H”VÔä˜4×Ð% Ó%ÐÜ�t×Ð!˜TÓ!ÐØ€KøôQ ”ZÐ ó 4Ü˜D˜6Ð!1Ð2Ó3Ð3ð4ús   ‚G$ Ç$Hc                óf  • [         R                  R                  U 5      u  p[         R                  R                  U5      u  p[	        5       nU/UR                  S5      -    H;  nU[
        R                  ;   d  M  UR                  [
        R                  U   5          O   [        U5      S:”  a�  USS  R                  5       nU[
        R                  ;   a$  UR                  [
        R                  U   5        U$ U[
        R                  ;   a"  UR                  [
        R                  U   5        U$ )NÚ.r   é   )r   r$   ÚsplitÚsplitextÚsetr   ÚNAMESr'   r&   ÚlowerÚ
EXTENSIONSÚEXTENSIONS_NEED_BINARY_CHECK)r$   Ú_ÚfilenameÚextÚretÚparts         r4   r#   r#   V   sí   € Ü—'‘'—-‘- Ó%�K€AÜ�W‰W×Ñ˜hÓ'�F€Aä
‹%€Cð �
˜XŸ^™^¨CÓ0Ô0ˆØ”:×#Ñ#Õ#Ø�J‰J”z×'Ñ'¨Ñ-Ô.Ùñ 1ô
 ˆ3ƒx�!ƒ|Ø�!�"ˆg�m‰m‹oˆØ”*×'Ñ'Ó'Ø�J‰J”z×,Ñ,¨SÑ1Ô2ð €Jð ”J×;Ñ;Ó;Ø�J‰J”z×>Ñ>¸sÑCÔDà€Jó    c                óÖ   • U R                  S5      u    pU (       aE  U [        R                  ;   a  [        R                  U    $ U R                  S5      u  n   nU (       a  ME  [        5       $ )NÚ/r7   )Ú
rpartitionr   ÚINTERPRETERSr;   )Úinterpreterr@   s     r4   r)   r)   l   sb   € Ø#×.Ñ.¨sÓ3Ñ€A€qö Øœ,×3Ñ3Ó3Ü×,Ñ,¨[Ñ9Ð9à +× 6Ñ 6°sÓ ;ÑˆK˜˜A÷	 ˆ+ô ‹5€LrE   c                óÒ   • [        / SQ5      [        [        SS5      5      -   [        [        SS5      5      -   n[        U R                  S5      R	                  SU5      5      (       + $ )zÜReturn whether the first KB of contents seems to be binary.

This is roughly based on libmagic's binary/text detection:
https://github.com/file/file/blob/df74b09b9027676088c797528edcaae5a9ce9ad0/src/encoding.c#L203-L228
)é   é   é	   é
   é   é   é   é   é    é   é€   é   i   N)Ú	bytearrayÚrangeÚboolÚreadÚ	translate)ÚbytesioÚ
text_charss     r4   Úis_textr_   y   s`   € ô 	Ò/Ó0Ü”%˜˜dÓ#Ó$ñ	%ä”%˜˜eÓ$Ó%ñ	&ð ô
 �G—L‘L Ó&×0Ñ0°°zÓBÓCÔCÐCrE   c                óÊ   • [         R                  R                  U 5      (       d  [        U  S35      e[	        U S5       n[        U5      sS S S 5        $ ! , (       d  f       g = f)Nr   Úrb)r   r$   Úlexistsr   Úopenr_   )r$   Úfs     r4   r+   r+   ‡   sG   € Ü�7‰7�?‰?˜4× Ñ Ü˜D˜6Ð!1Ð2Ó3Ð3Ü	ˆd�DÔ	˜QÜ�q‹z÷ 
×	×	ús   ¿AÁ
A"c                óp   •  [         R                  " U 5      $ ! [         a    U R                  5       s $ f = f)N)Úshlexr9   r   )Úlines    r4   Ú_shebang_splitrh   Ž   s5   € ðô �{Š{˜4Ó Ð øÜó ð �z‰z‹|Òðús   ‚ ˜5´5c                ó†  • U R                  S5      S:X  a™  U R                  5       n UR                  S5      nU H  nU[        ;  d  M  Us  $    [        [        UR                  5       5      5      n[        US S 5       H  u  pgUS:w  a  M  XVS-      4nM     U R                  S5      S:X  a  M™  U$ ! [         a    Us $ f = f)Né   ó   #!úUTF-8éÿÿÿÿz-ir8   )	r[   ÚreadlineÚdecodeÚUnicodeDecodeErrorÚ	printableÚtuplerh   ÚstripÚ	enumerate)r]   ÚcmdÚnext_line_bÚ	next_lineÚcÚline_tokensÚiÚtokens           r4   Ú_parse_nix_shebangr|   š   sÈ   € ð �,‰,�q‹/˜UÓ
"Ø×&Ñ&Ó(ˆð	Ø#×*Ñ*¨7Ó3ˆIó ˆAØœ	Õ!Ø’
ñ ô œN¨9¯?©?Ó+<Ó=Ó>ˆÜ! +¨c¨rÐ"2Ö3‰HˆAØ˜‹}Ùà 1™uÑ%Ð'ŠCñ	 4ð �,‰,�q‹/˜UÕ
"ð" €Jøô "ó 	ØŠJð	ús   §B1 Â1C Â?C c                ó`  • U R                  S5      S:w  a  gU R                  5       n UR                  S5      nU H  nU[        ;  d  M    g   [        [        UR                  5       5      5      nUSS S:X  a  USS nOUSS S:X  a  USS nUS	:X  a  [        X5      $ U$ ! [         a     gf = f)
z8Parse the shebang from a file opened for reading binary.rj   rk   © rl   N)ú/usr/bin/envz-Sr8   )r   )z	nix-shell)	r[   rn   ro   rp   rq   rr   rh   rs   r|   )r]   Úfirst_line_bÚ
first_linerx   ru   s        r4   Úparse_shebangr‚   ²   sÉ   € à‡|�|�Aƒ˜%ÓØØ×#Ñ#Ó%€LðØ!×(Ñ(¨Ó1ˆ
ó
 ˆØ”IÕÙñ ô ”˜z×/Ñ/Ó1Ó2Ó
3€CØ
ˆ2ˆA€wÐ(Ó(Ø�!�"ˆg‰Ø	ˆRˆaˆÐ%Ó	%Ø�!�"ˆgˆà
ˆnÓÜ! 'Ó/Ð/à€Jøô# ó Ùðús   ¨B  Â 
B-Â,B-c                óŽ  • [         R                  R                  U 5      (       d  [        U  S35      e[         R                  " U [         R
                  5      (       d  g [        U S5       n[        U5      sSSS5        $ ! , (       d  f       g= f! [         a)  nUR                  [        R                  :X  a   SnAge SnAff = f)z$Parse the shebang given a file path.r   r~   ra   N)r   r$   rb   r   r   r   rc   r‚   r   ÚerrnoÚEINVAL)r$   rd   Úes      r4   r(   r(   Í   sŠ   € ä�7‰7�?‰?˜4× Ñ Ü˜D˜6Ð!1Ð2Ó3Ð3Ü�9Š9�Tœ2Ÿ7™7×#Ñ#ØðÜ�$˜Ô Ü  Ó#÷ ××ûäó Ø�7‰7”e—l‘lÓ"Üàûð	ús<   ÁB Á+B Á6	B Â 
BÂ
B ÂB Â
CÂB?Â>B?Â?Cz^\s*(Copyright|\(C\)) .*$z\s+c                óz   • [         R                  SU 5      n [        R                  SU 5      n U R                  5       $ )NÚ Ú )ÚCOPYRIGHT_REÚsubÚWS_RErs   )Úss    r4   Ú_norm_licenserŽ   â   s0   € Ü×Ñ˜˜QÓ€AÜ�	‰	�#�qÓ€AØ�7‰7‹9ÐrE   c                ó"  • SSK n[        U SS9 nUR                  5       nSSS5        [        W5      n[        R
                  nSn[        R                  " S[        U5      -  5      n[        R                   Hv  u  p‰[        U	5      n
XJ:X  a  Us  $ U(       a2  [        [        U5      [        U
5      -
  5      [        U5      -  S:”  a  MR  UR                  XJU5      nX·:  d  Mk  Xµ:  d  Mr  UnUnMx     U(       a  XW:  a  U$ g! , (       d  f       Næ= f)a›  Return the spdx id for the license contained in `filename`.  If no
license is detected, returns `None`.

spdx: https://spdx.org/licenses/
licenses from choosealicense.com: https://github.com/choosealicense.com

Approximate algorithm:

1. strip copyright line
2. normalize whitespace (replace all whitespace with a single space)
3. check exact text match with existing licenses
4. failing that use edit distance
r   Nrl   )Úencodingrˆ   gš™™™™™©?)Úukkonenrc   r[   rŽ   ÚsysÚmaxsizeÚmathÚceilr&   r   ÚLICENSESÚabsÚdistance)rA   r‘   rd   ÚcontentsÚnormÚmin_edit_distÚmin_edit_dist_spdxÚcutoffÚspdxr   Únorm_licenseÚ	edit_dists               r4   Ú
license_idr¡   è   sî   € ó ä	ˆh Ò	)¨QØ—6‘6“8ˆ÷ 
*ô ˜Ó"€Dä—K‘K€MØÐä�YŠY�sœS ›Y‘Ó'€Fô ×'Ô'‰
ˆÜ$ TÓ*ˆØÓØŠKö ”Cœ˜D›	¤C¨Ó$5Ñ5Ó6¼¸T»ÑBÀSÓHÙà×$Ñ$ T¸Ó@ˆ	ØÕ )Õ";Ø%ˆMØ!%Òñ (ö �Ó&Ø!Ð!ð ÷= 
*Õ	)ús   �D Ä 
D)r$   ÚstrÚreturnúset[str])rJ   r¢   r£   r¤   )r]   ú	IO[bytes]r£   rZ   )r$   r¢   r£   rZ   )rg   r¢   r£   z	list[str])r]   r¥   ru   útuple[str, ...]r£   r¦   )r]   r¥   r£   r¦   )r$   r¢   r£   r¦   )r�   r¢   r£   r¢   )rA   r¢   r£   z
str | None)7Ú
__future__r   r„   r”   Úos.pathr   Úrerf   r   Ústringr’   Útypingr   Úidentifyr   r   Úidentify.vendorr   Ú	frozensetrq   r   r   r   r   r!   r"   r,   r-   Ú	TYPE_TAGSr.   r*   Ú	_ALL_TAGSr'   r>   Úvaluesr?   r<   rI   ÚALL_TAGSr5   r#   r)   r_   r+   rh   r|   r‚   r(   ÚcompileÚIÚ	MULTILINErŠ   rŒ   rŽ   r¡   r~   rE   r4   Ú<module>r¶      s©  ðÝ "ã Û Û Û 	Û Û Û Û 
Ý å Ý !Ý $ñ �f×&Ñ&Ó'€	à€	Ø
€Ø	€Ø€Ø€
Ø!€Ø€Ø	€á�y $¨°Ð8Ó9€	Ù�z >Ð2Ó3€	Ù˜6 4˜.Ó)€Ø4ˆiÐ4˜)Ð4 mÐ4€	Ø 	× Ò �*×'Ñ'×.Ñ.Ó0Ñ 1Ø 	× Ò �*×9Ñ9×@Ñ@ÓBÑ CØ 	× Ò �*×"Ñ"×)Ñ)Ó+Ñ ,Ø 	× Ò �,×+Ñ+×2Ñ2Ó4Ñ 5Ù�YÓ€ô+ô\ô,
ôDôô	ðØðàðð ôô0ô6ð" �zŠzÐ6¸¿¹¸r¿|¹|Ñ8KÓL€Ø
�
Š
�6Ó€ôõ.rE   