Ë
    pPêjáŒ  ã                  óè  — U d Z ddlmZ ddlZddlZddl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mZmZmZmZ ddlmZ ddlmZmZmZmZmZ ddlmZ ded	<   	 ddlZ	 ddlZddl Z d
Z!	 ddl"Z"d
Z# ed«      Z$ e% ejL                  d«      dz  «      Z'ded<    ejP                  d«      Z)ded<   dZ*ded<   de*z  Z+ded<   dZ,ded<   dZ-ded<   dZ.ded<   dZ/ded<    e0d«      Z1ded <   ddded!„Z2dfd"„Z3dgd#„Z4dhd$„Z5did%„Z6djd&„Z7dkd'„Z8dld(„Z9 G d)„ d*e:«      Z;dmd+„Z<dnd,„Z=dod-„Z>dpd.„Z?d/Z@ded0<   d1ZAded2<   d3ZBded4<   d5ZCded6<   d7ZDded8<   	 	 	 	 	 	 	 	 	 	 	 	 dqd9„ZE	 	 	 	 	 	 	 	 	 	 	 	 	 	 drd:„ZF G d;„ d<«      ZGdsd=„ZH	 	 	 	 	 	 	 	 	 	 dtd>„ZIi ZJd?ed@<   dudA„ZK	 dv	 	 	 	 	 	 	 	 	 dwdB„ZLdxdC„ZMe	jœ                  dDk(  se	jœ                  dEk(  rdydF„ZOndzdG„ZOd{d|dH„ZPd}dI„ZQd~dJ„ZRddK„ZSd€dL„ZTd�dM„ZUd‚dN„ZVd{dƒdO„ZWd„dP„ZXd…dQ„ZYd†dR„ZZd‡dS„Z[ G dT„ dU«      Z\dˆdV„Z]dˆdW„Z^d‰dX„Z_dŠdY„Z`e
jÂ                  Zbd‹dZ„ZcdŒd[„Zdd�d\„ZedddŽd]„Zfd�d^„Zgdahd_ed`<   d‡da„Zid‚db„Zjd�dc„Zky# e$ r dZY �Œøw xY w# e$ r dZ!Y �Œûw xY w# e$ r dZ#Y �Œw xY w)‘z3Utility functions with no non-trivial dependencies.é    )ÚannotationsN)ÚCallableÚ	ContainerÚIterableÚSequenceÚSized)Ú	resources)ÚIOÚAnyÚFinalÚLiteralÚTypeVar)Úi64r   ÚorjsonTFÚTÚmypyÚtypeshedr   ÚTYPESHED_DIRs=   ([ \t\v]*#.*(\r\n?|\n))??[ \t\v]*#.*coding[:=][ \t]*([-\w.]+)ÚENCODING_REé   ÚDEFAULT_SOURCE_OFFSETú Ú
CODE_STARTéP   ÚDEFAULT_COLUMNSé   ÚMINIMUM_WIDTHé
   ÚMINIMUM_WINDOWS_MAJOR_VT100iZ)  ÚMINIMUM_WINDOWS_BUILD_VT100)Ú__init__Ú__new__Ú__call__Ú__init_subclass__Ú__class_getitem__ÚSPECIAL_DUNDERSc                ó`   — |r	| t         v ry| j                  d«      xr | j                  d«      S )z�Returns whether name is a dunder name.

    Args:
        exclude_special: Whether to return False for a couple special dunder methods.

    FÚ__)r&   Ú
startswithÚendswith)ÚnameÚexclude_specials     úN/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/mypy/util.pyÚ	is_dunderr.   B   s.   € ñ ˜4¤?Ñ2ØØ�?‰?˜4Ó Ò8 T§]¡]°4Ó%8Ð8ó    c                ót   — t        | «       xr+ | j                  d«      xr | j                  d«      xr | dk7  S ©NÚ_)r.   r)   r*   ©r+   s    r-   Ú	is_sunderr4   N   s7   € Ü˜‹ÐÒ^ 4§?¡?°3Ó#7Ò^¸D¿M¹MÈ#Ó<NÒ^ÐSWÐ[^ÑS^Ð^r/   c                ój   — | g}d| v r+| j                  dd«      d   } |j                  | «       d| v rŒ+|S )z�Return the module and all parent module names.

    So, if `mod_name` is 'a.b.c', this function will return
    ['a.b.c', 'a.b', and 'a'].
    ú.é   r   )ÚrsplitÚappend)Úmod_nameÚouts     r-   Úsplit_module_namesr<   R   sC   € ð ˆ*€CØ
�‰/Ø—?‘? 3¨Ó*¨1Ñ-ˆØ�
‰
�8Ôð �Š/ð €Jr/   c                ó*   — t        | |«      }|€y |d   S ©Nr   )Úsplit_target)ÚmodulesÚtargetÚresults      r-   Úmodule_prefixrC   _   s    € Ü˜' 6Ó*€FØ€~ØØ�!‰9Ðr/   c                ó®   — g }	 || v r|dj                  |«      fS |j                  dd«      }t        |«      dk(  ry |d   }|j                  d|d   «       ŒS)Nr6   r7   r   )Újoinr8   ÚlenÚinsert)r@   rA   Ú	remainingÚ
componentss       r-   r?   r?   f   sg   € Ø€IØ
Ø�WÑØ˜3Ÿ8™8 IÓ.Ð.Ð.Ø—]‘] 3¨Ó*ˆ
Üˆz‹?˜aÒØØ˜A‘ˆØ×Ñ˜˜J q™MÔ*ð r/   c                óv   — | €yt        t        | «      «      }|j                  d«      d   j                  d«      S )zˆReturn the last component of the type name of an object.

    If obj is None, return 'nil'. For example, if obj is 1, return 'int'.
    Únilr6   éÿÿÿÿz'>)ÚstrÚtypeÚsplitÚrstrip)ÚobjÚts     r-   Ú
short_typerS   r   s7   € ð
 €{ØÜŒD�‹I‹€AØ�7‰7�3‹<˜Ñ×"Ñ" 4Ó(Ð(r/   c                óÞ   — t         j                  | «      }|rQ|j                  d«      rdnd}|j                  d«      j                  d«      }|j	                  d«      s|dk(  rd}||fS d}|d	fS )
z*PEP-263 for detecting Python file encodingr7   é   é   Úascii)ziso-latin-1-zlatin-1-ziso-latin-1zlatin-1Úutf8rL   )r   ÚmatchÚgroupÚdecoder)   )ÚtextrB   ÚlineÚencodingÚdefault_encodings        r-   Úfind_python_encodingr`   }   st   € ä×Ñ˜tÓ$€FÙØ—L‘L ”O‰q¨ˆØ—<‘< “?×)Ñ)¨'Ó2ˆà×ÑÐ;Ô<ÀÈMÒ@YØ ˆHØ˜ˆ~Ðà!ÐØ Ð#Ð#r/   c                ó   — t        | «      dd S )a2  Converts bytes into some human-readable representation. Unprintable
    bytes such as the nul byte are escaped. For example:

        >>> b = bytes([102, 111, 111, 10, 0])
        >>> s = bytes_to_human_readable_repr(b)
        >>> print(s)
        foo
 
        >>> print(repr(s))
        'foo\n\x00'
    rU   rL   )Úrepr)Úbs    r-   Úbytes_to_human_readable_reprrd   Œ   s   € ô �‹7�1�Rˆ=Ðr/   c                  ó   — e Zd ZdZy)ÚDecodeErrorz Exception raised when a file cannot be decoded due to an unknown encoding type.

    Essentially a wrapper for the LookupError raised by `bytearray.decode`
    N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© r/   r-   rf   rf   š   s   „ òr/   rf   c                óÄ   — | j                  d«      rd}| dd } nt        | «      \  }}	 | j                  |«      }|S # t        $ r}t	        t        |«      «      |‚d}~ww xY w)zmRead the Python file with while obeying PEP-263 encoding detection.

    Returns the source as a string.
    s   ï»¿rX   rV   N)r)   r`   r[   ÚLookupErrorrf   rM   )Úsourcer^   r2   Úsource_textÚ	lookuperrs        r-   Údecode_python_encodingrq   ¡   sp   € ð ×Ñ˜Ô)ØˆØ˜˜�‰ô +¨6Ó2‰ˆ�!ð9Ø—m‘m HÓ-ˆð Ðøô ò 9Üœ#˜i›.Ó)¨yÐ8ûð9ús   ©< ¼	AÁAÁAc                óˆ   — 	  || «      }	 t        |«      j                  «       }|S # t        $ r Y yw xY w# t        $ r Y yw xY w)zaTry reading a Python file as list of source lines.

    Return None if something goes wrong.
    N)rq   Ú
splitlinesrf   ÚOSError)ÚpathÚreadrn   Úsource_liness       r-   Úread_py_filerx   µ   sW   € ð
	Ù�d“ˆð	Ü1°&Ó9×DÑDÓFˆLð Ðøô ò 	Ùð	ûô ò Ùðús   ‚5 ‹& ¦	2±2µ	AÁ Ac                ó  — |d|z  dz   k  rd|z  dz   }t        | «      |k  r| dfS ||z   |k  r
| d| dz   dfS |t        | «      |z
  dz
  k  r!||z
  |z   dz   }d| |||z   dz    z   dz   |dz
  fS d| | d z   t        | «      |z
  dz
  fS )a‹  Trim a line of source code to fit into max_len.

    Show 'min_width' characters on each side of 'col' (an error location). If either
    start or end is trimmed, this is indicated by adding '...' there.
    A typical result looks like this:
        ...some_variable = function_to_call(one_arg, other_arg) or...

    Return the trimmed string and the column offset to adjust error location.
    rU   r7   r   Nú...rV   )rF   )r]   Úmax_lenÚcolÚ	min_widthÚoffsets        r-   Útrim_source_liner   Æ   sÚ   € ð ��Y‘ Ñ"Ò"à�i‘- !Ñ#ˆô ˆ4ƒy�GÒØ�Qˆwˆð ˆY�˜Ò Ø�H�Wˆ~ Ñ% qÐ(Ð(ð ŒS�‹Y˜Ñ" QÑ&Ò&Ø�w‘ Ñ*¨QÑ.ˆØ�t˜F S¨9¡_°qÑ%8Ð9Ñ9¸EÑAÀ6ÈAÁ:ÐMÐMð �4˜˜˜	�?Ñ"¤C¨£I°Ñ$7¸!Ñ$;Ð;Ð;r/   c                óÊ   — d}|| vrg S | j                  d«      }g }t        |«      D ]9  \  }}|j                  |«      sŒ|j                  |dz   |t	        |«      d  f«       Œ; |S )Nz# mypy: ú
r7   )rO   Ú	enumerater)   r9   rF   )rn   ÚPREFIXÚlinesÚresultsÚir]   s         r-   Úget_mypy_commentsr‡   æ   sr   € Ø€Fà�VÑØˆ	Ø�L‰L˜Ó€EØ€GÜ˜UÓ#ò 9‰ˆˆ4Ø�?‰?˜6Õ"Ø�N‰N˜A ™E 4¬¨F«¨Ð#6Ð7Õ8ð9ð €Nr/   z“<?xml version="1.0" encoding="utf-8"?>
<testsuite errors="{errors}" failures="{failures}" name="mypy" skips="0" tests="{tests}" time="{time:.3f}">
ÚJUNIT_HEADER_TEMPLATEz¦  <testcase classname="mypy" file="{filename}" line="1" name="{name}" time="{time:.3f}">
    <failure message="mypy produced messages">{text}</failure>
  </testcase>
ÚJUNIT_TESTCASE_FAIL_TEMPLATEz«  <testcase classname="mypy" file="mypy" line="1" name="mypy-py{ver}-{platform}" time="{time:.3f}">
    <error message="mypy produced errors">{text}</error>
  </testcase>
ÚJUNIT_ERROR_TEMPLATEzr  <testcase classname="mypy" file="mypy" line="1" name="mypy-py{ver}-{platform}" time="{time:.3f}">
  </testcase>
ÚJUNIT_TESTCASE_PASS_TEMPLATEz</testsuite>
ÚJUNIT_FOOTERc                ó  — ddl m} |rd}t        |«      }nt        |«      }d}t        j	                  ||| t        |«      xs d¬«      }|s|t
        j	                  | ||¬«      z  }n•|j                  «       D ]‚  \  }	}
|	�D|t        j	                   |dj                  |
«      «      |	| dj	                  |||	¬«      ¬	«      z  }ŒL|t        j	                   |dj                  |
«      «      d
| d|› d|› �¬	«      z  }Œ„ |t        z  }|S )Nr   )Úescaper7   )ÚerrorsÚfailuresÚtimeÚtests)r‘   ÚverÚplatformr�   z"mypy-py{ver}-{platform} {filename})r“   r”   Úfilename)r\   r•   r‘   r+   r   zmypy-pyú-)
Úxml.sax.saxutilsrŽ   rF   rˆ   Úformatr‹   Úitemsr‰   rE   rŒ   )ÚdtÚseriousÚmessages_by_fileÚversionr”   rŽ   r�   r�   Úxmlr•   Úmessagess              r-   Ú_generate_junit_contentsr    
  sB  € õ (áØˆÜÐ%Ó&‰äÐ'Ó(ˆØˆä
×
&Ñ
&ØØØäÐ"Ó#Ò( qð 'ó €Cñ ØÔ+×2Ñ2¸ÀÐRZÐ2Ó[Ñ[‰à"2×"8Ñ"8Ó":ò 	ÑˆH�hØÐ#ØÔ3×:Ñ:Ù §	¡	¨(Ó 3Ó4Ø%ØØ=×DÑDØ#¨hÀð Eó ð	 ;ó ñ ‘ð Ô3×:Ñ:Ù §	¡	¨(Ó 3Ó4Ø#ØØ" 7 )¨1¨X¨JÐ7ð	 ;ó ñ ‘ð	ð$ Œ<Ñ€Cà€Jr/   c                óJ  — t        | ||||«      }t        j                  j                  t        j                  j	                  |«      «      }t        j
                  |d¬«       t        |d«      5 }|j                  |j                  d«      «       d d d «       y # 1 sw Y   y xY w)NT)Úexist_okÚwbúutf-8)	r    Úosru   ÚdirnameÚabspathÚmakedirsÚopenÚwriteÚencode)	rš   r›   rœ   ru   r�   r”   rž   Úxml_dirsÚfs	            r-   Úwrite_junit_xmlr®   <  s|   € ô # 2 wÐ0@À'È8Ó
T€Cô �w‰w�‰œrŸw™wŸ™¨tÓ4Ó5€HÜ‡K�K� 4Õ(ä	ˆd�DÓ	ð %˜QØ	�‰�—
‘
˜7Ó#Ô$÷%÷ %ñ %ús   Á/!BÂB"c                  ó    — e Zd ZdZdd„Zdd„Zy)ÚIdMapperzÕGenerate integer ids for objects.

    Unlike id(), these start from 0 and increment by 1, and ids won't
    get reused across the life-time of IdMapper.

    Assume objects don't redefine __eq__ or __hash__.
    c                ó    — i | _         d| _        y r>   ©Úid_mapÚnext_id©Úselfs    r-   r!   zIdMapper.__init__W  s   € Ø)+ˆŒØˆ�r/   c                ó˜   — || j                   vr.| j                  | j                   |<   | xj                  dz  c_        | j                   |   S )Nr7   r²   )r¶   Úos     r-   ÚidzIdMapper.id[  s;   € Ø�D—K‘KÑØ!Ÿ\™\ˆD�K‰K˜‰NØ�LŠL˜AÑ�LØ�{‰{˜1‰~Ðr/   N)ÚreturnÚNone)r¸   Úobjectrº   Úint)rg   rh   ri   rj   r!   r¹   rk   r/   r-   r°   r°   N  s   „ ñóôr/   r°   c                ó,   — | j                  dd«      d   S )zBDrop the final component of a qualified name (e.g. ('x.y' -> 'x').r6   r7   r   )r8   )Úfullnames    r-   Ú
get_prefixrÀ   b  s   € à�?‰?˜3 Ó" 1Ñ%Ð%r/   c                ó¼   — |dk(  r|dfS | j                  d«      }|}|r|dz  }t        |«      |k\  }|dk7  rdj                  |d |  «      } | |r	d|z   z   |fS dz   |fS )Nr   Tr6   r7   Ú )rO   rF   rE   )Ú
cur_mod_idÚrelativerA   Úis_cur_package_init_fileÚpartsÚrelÚoks          r-   Úcorrect_relative_importrÉ   g  s„   € ð �1‚}Ø�tˆ|ÐØ×Ñ˜SÓ!€EØ
€CÙØˆq‰ˆÜ	ˆU‹�sÑ	€BØ
ˆa‚xØ—X‘X˜e E c T˜lÓ+ˆ
Ø©6˜# ™,Ñ:¸BÐ>Ð>°rÑ:¸BÐ>Ð>r/   z$Final[dict[type[object], list[str]]]Úfields_cachec                ó´   ‡— dd l Š| t        vr=‰j                  | ˆfd„«      }|D ��cg c]  \  }}|dk7  sŒ|dk7  sŒ|‘Œ c}}t        | <   t        |    S c c}}w )Nr   c                óL   •— ‰j                  | «      xs ‰j                  | «      S ©N)ÚisgetsetdescriptorÚismemberdescriptor)r¸   Úinspects    €r-   ú<lambda>z'get_class_descriptors.<locals>.<lambda>€  s#   ø€ ˜7×5Ñ5°aÓ8ÒY¸G×<VÑ<VÐWXÓ<Y€ r/   Ú__weakref__Ú__dict__)rÐ   rÊ   Ú
getmembers)ÚclsÚmembersÚxÚyrÐ   s       @r-   Úget_class_descriptorsrÙ   y  s`   ø€ Ûð ”,ÑØ×$Ñ$ØÓYó
ˆð ,3×]¡4 1 a°a¸=Ó6HÈQÐR\Ë_šQÓ]Œ�SÑÜ˜ÑÐùó ^s   ¨A¶A¼Ac           	     óN  — t        |d«      r.|rt        |j                  «      | _        n|j                  | _        t        |j                  «      D ]D  }||v rŒ	 t        ||«      rt        | |t        ||«      «       nt        | |«      rt        | |«       ŒF y# t        $ r Y ŒSw xY w)a   Copy state of old node to the new node.

    This handles cases where there is __dict__ and/or attribute descriptors
    (either from slots or because the type is defined in a C extension module).

    Assume that both objects have the same __class__.
    rÓ   N)	ÚhasattrÚdictrÓ   rÙ   Ú	__class__ÚsetattrÚgetattrÚdelattrÚAttributeError)ÚnewÚoldÚ	copy_dictÚ
skip_slotsÚattrs        r-   Úreplace_object_staterç   †  sš   € ô ˆs�JÔÙÜ §¡Ó-ˆC�LàŸ<™<ˆCŒLä% c§m¡mÓ4ò ˆØ�:ÑØð
	Ü�s˜DÔ!Ü˜˜T¤7¨3°Ó#5Õ6Ü˜˜dÔ#Ü˜˜TÔ"øñøô ò 	Ùð	ús   Á<BÂ	B$Â#B$c                óˆ   — |j                  t        j                  «      s|t        j                  z  }| j                  |«      S )ay  Given two paths, return if path is a sub-path of dir.

    Moral equivalent of: Path(dir) in Path(path).parents

    Similar to the pathlib version:
    - Treats paths case-sensitively
    - Does not fully handle unnormalised paths (e.g. paths with "..")
    - Does not handle a mix of absolute and relative paths
    Unlike the pathlib version:
    - Fast
    - On Windows, assumes input has been slash normalised
    - Handles even fewer unnormalised paths (e.g. paths with "." and "//")

    As a result, callers should ensure that inputs have had os.path.abspath called on them
    (note that os.path.abspath will normalise)
    )r*   r¥   Úsepr)   )ru   Údirs     r-   Úis_sub_path_normabsrë   ¦  s0   € ð" �<‰<œŸ™ÔØŒr�v‰v‰ˆØ�?‰?˜3ÓÐr/   ÚlinuxÚdarwinc                óh   — |j                  d«      s| s|S | j                  d«      r| |z   S | dz   |z   S )Nú/)r)   r*   )ru   rc   s     r-   Úos_path_joinrð   ¾  s8   € à�<‰<˜Ô¡DØˆHØ�]‰]˜3ÔØ˜!‘8ˆOà˜#‘: ‘>Ð!r/   c                óB   — t         j                  j                  | |«      S rÍ   )r¥   ru   rE   )ÚaÚps     r-   rð   rð   É  s   € Ü�w‰w�|‰|˜A˜qÓ!Ð!r/   c                ó¦   — t         j                  j                  «        t         j                  j                  «        t	        j
                  | «       y)zŽKill the current process without fully cleaning up.

    This can be quite a bit faster than a normal exit() since objects are not freed.
    N)ÚsysÚstdoutÚflushÚstderrr¥   Ú_exit)Ústatuss    r-   Ú	hard_exitrû   Í  s0   € ô
 ‡J�J×ÑÔÜ‡J�J×ÑÔÜ‡H�HˆVÕr/   c                ó$   — | j                  d«      S )z+Remove internal suffixes from a short name.ú')rP   r3   s    r-   Úunmanglerþ   ×  s   € à�;‰;�sÓÐr/   c                ó„   — | dz   }||vr|S d}|t        |«      z   |v r|dz  }|t        |«      z   |v rŒ|t        |«      z   S )zÙGet a simple redefinition name not present among existing.

    For example, for name 'foo' we try 'foo-redefinition', 'foo-redefinition2',
    'foo-redefinition3', etc. until we find one that is not in existing.
    z-redefinitionrU   r7   )rM   )r+   ÚexistingÚr_namer†   s       r-   Úget_unique_redefinition_namer  Ü  sY   € ð �OÑ#€FØ�XÑØˆà	€AØ
”3�q“6‰/˜XÑ
%Ø	ˆQ‰ˆð ”3�q“6‰/˜XÒ
%à”C˜“F‰?Ðr/   c                ó|   — t         j                  dd dk  r&t        j                  dj                  | ¬«      «       yy)zAReport issues with the Python used to run mypy, dmypy, or stubgenNrU   )rV   r   zYRunning {name} with Python 3.9 or lower is not supported; please upgrade to 3.10 or newerr3   )rõ   Úversion_infoÚexitr˜   )Úprograms    r-   Úcheck_python_versionr  ì  s;   € ô ×Ñ˜˜Ð˜gÒ%Ü�‰ð.ß.4©f¸'¨fÓ.Bõ	
ð &r/   c                óò   — | D �cg c]	  }d|v sŒ|‘Œ }}|D �ch c]  }|j                  d«      d   ’Œ }}| D �cg c]	  }d|v sŒ|‘Œ }}t        |«      t        |«      t        |«      fS c c}w c c}w c c}w )zDCount total number of errors, notes and error_files in message list.ú: error:ú:r   ú: note:)rO   rF   )rŸ   Úer�   Úerror_filesÚnotess        r-   Úcount_statsr  ö  sx   € à!Ö5�A Z°1¢_ŠaÐ5€FÐ5Ø,2Ö3 q�1—7‘7˜3“< “?Ð3€KÐ3Ø Ö3�1 I°¢NŠQÐ3€EÐ3Üˆv‹;œ˜E›
¤C¨Ó$4Ð4Ð4ùò 6ùÚ3ùÚ3s   …	A*�A*™A/º	A4ÁA4c                ó’   — d}g }d}| D ]*  }|dk(  r|r|j                  |«       d}Œ|dk(  r| }||z  }Œ, |j                  |«       |S )z=Split line of text into words (but not within quoted groups).rÂ   Tr   ú")r9   )ÚmsgÚ	next_wordÚresÚallow_breakÚcs        r-   Úsplit_wordsr  þ  sg   € à€IØ€CØ€KØò ˆØ�Š8™Ø�J‰J�yÔ!ØˆIØØ�Š8Ø)˜/ˆKØ�Q‰‰	ðð ‡J�JˆyÔØ€Jr/   c                 ó�   — t        t        j                  dd«      «      xs& t        j                  «       j
                  xs t        S )zIGet current terminal width if possible, otherwise return the default one.ÚMYPY_FORCE_TERMINAL_WIDTHÚ0)r½   r¥   ÚgetenvÚshutilÚget_terminal_sizeÚcolumnsr   rk   r/   r-   Úget_terminal_widthr    s<   € ô 	ŒB�I‰IÐ1°3Ó7Ó8ò 	Ü×#Ñ#Ó%×-Ñ-ò	äðr/   c                óH  — t        | «      }|j                  d«      }g }|rY|j                  d«      }|r||z
  n||z
  }t        |«      t        |«      z   dz   |k  r	|d|z   z  }n|j                  |«       |}|rŒY|j                  |«       dd|z  z   }	|	j	                  |«      S )aæ  Wrap a long error message into few lines.

    Breaks will only happen between words, and never inside a quoted group
    (to avoid breaking types such as "Union[int, str]"). The 'first_offset' is
    the width before the start of first line.

    Pad every next line with 'num_indent' spaces. Every line will be at most 'max_len'
    characters, except if it is a single word or quoted group.

    For example:
               first_offset
        ------------------------
        path/to/file: error: 58: Some very long error message
            that needs to be split in separate lines.
            "Long[Type, Names]" are never split.
        ^^^^--------------------------------------------------
        num_indent           max_len
    r   r7   r   r�   )r  ÚpoprF   r9   rE   )
r  r{   Úfirst_offsetÚ
num_indentÚwordsÚ	next_liner„   r  Úmax_line_lenÚpaddings
             r-   Ú	soft_wrapr(    s­   € ô& ˜Ó€EØ—	‘	˜!“€IØ€EÙ
Ø—I‘I˜a“Lˆ	Ù/4�w Ò+¸'ÀLÑ:Pˆäˆy‹>œC 	›NÑ*¨QÑ.°,Ò>Ø˜˜y™Ñ(‰Ià�L‰L˜Ô#Ø!ˆIò ð 
‡L�L�ÔØ�S˜:Ñ%Ñ%€GØ�<‰<˜ÓÐr/   c                óH   — t        j                  | «      j                  «       S )zÐCompute a hash digest of some data.

    We use a cryptographic hash because we want a low probability of
    accidental collision, but we don't really care about any of the
    cryptographic properties.
    )ÚhashlibÚsha1Ú	hexdigest©Údatas    r-   Úhash_digestr/  <  s   € ô �<‰<˜Ó×'Ñ'Ó)Ð)r/   c                óH   — t        j                  | «      j                  «       S )zZCompute a hash digest of some data.

    Similar to above but returns a bytes object.
    )r*  r+  Údigestr-  s    r-   Úhash_digest_bytesr2  F  s   € ô
 �<‰<˜Ó×$Ñ$Ó&Ð&r/   c                óê   — t         j                  dk7  sJ d«       ‚dj                  | dd j                  «       dg«      }t	        j
                  |j                  d«      dd	«      j                  «       }|S )
z.Reproduce a gray color in ANSI escape sequenceÚwin32z"curses is not available on WindowsrÂ   NrL   Úmr¤   r7   é	   )rõ   r”   rE   r[   ÚcursesÚtparmr«   )ÚcupÚ	set_colorÚgrays      r-   Úparse_gray_colorr<  N  se   € ä�<‰<˜7Ò"ÐHÐ$HÓHÐ"Ø—‘˜˜S˜b˜Ÿ™Ó*¨CÐ0Ó1€IÜ�<‰<˜	×(Ñ(¨Ó1°1°aÓ8×?Ñ?ÓA€DØ€Kr/   c                 ó´   — t        j                  dt        j                  dd«      «      } 	 t        t        | «      «      S # t        $ r t        | «      cY S w xY w)NÚMYPY_FORCE_COLORÚFORCE_COLORr  )r¥   r  Úboolr½   Ú
ValueError)Úenv_vars    r-   Úshould_force_colorrC  V  sK   € Ü�i‰iÐ*¬B¯I©I°mÀSÓ,IÓJ€GðÜ”C˜“LÓ!Ð!øÜò Ü�G‹}Òðús   ¬A  Á AÁAc                  óÒ   — e Zd ZdZ	 d	 	 	 	 	 	 	 	 	 dd„Zdd„Zdd„Zdd„Z	 	 	 d	 	 	 	 	 	 	 	 	 	 	 dd„Zdd„Z		 d	 	 	 	 	 dd
„Z
dd„Zdd„Zdd„Zddd„Zdddœ	 	 	 	 	 	 	 	 	 	 	 dd„Zy	) ÚFancyFormatterzcApply color and bold font to terminal output.

    This currently only works on Linux and Mac.
    Fc                ó  — || _         || _        t        j                  dvrd| _        y t        «       s(|j                  «       r|j                  «       sd| _        y t        j                  dk(  r| j                  «        | _        n@t        j                  dk(  r| j                  «        | _        n| j                  «        | _        | j                  s6| j                  | j                  | j                  | j                  ddœ| _        y y )N)rì   rí   r4  Ú
emscriptenTr4  rG  rÂ   )ÚredÚgreenÚblueÚyellowÚnone)Úhide_error_codesÚhide_successrõ   r”   Ú
dummy_termrC  ÚisattyÚinitialize_win_colorsÚinitialize_vt100_colorsÚinitialize_unix_colorsÚREDÚGREENÚBLUEÚYELLOWÚcolors)r¶   Úf_outÚf_errrM  rN  s        r-   r!   zFancyFormatter.__init__d  sÒ   € ð !1ˆÔØ(ˆÔô �<‰<ÐIÑIØ"ˆDŒOØÜ!Ô#¨U¯\©\¬^À5Ç<Á<Ä>Ø"ˆDŒOØÜ�<‰<˜7Ò"Ø"&×"<Ñ"<Ó">Ð>ˆD�OÜ�\‰\˜\Ò)Ø"&×">Ñ">Ó"@Ð@ˆD�Oà"&×"=Ñ"=Ó"?Ð?ˆDŒOØ�Šà—x‘xØŸ™ØŸ	™	ØŸ+™+ØñˆD�Kð r/   c                óœ   — t         j                  dv sJ ‚d| _        d| _        d| _        d| _        d| _        d| _        d| _        d	| _	        y
)úSReturn True if initialization was successful and we can use colors, False otherwise)r4  rG  z[1mz[4mz[94mz[92mz[91mz[93mz[0mz[2mT)
rõ   r”   ÚBOLDÚUNDERrV  rU  rT  rW  ÚNORMALÚDIMrµ   s    r-   rR  z&FancyFormatter.initialize_vt100_colors€  sR   € ô �|‰|Ð6Ñ6Ð6Ð6ØˆŒ	ØˆŒ
ØˆŒ	ØˆŒ
ØˆŒØ ˆŒØˆŒØˆŒØr/   c                ó`  — t         j                  dk(  r•t        j                  «       }|j                  t        k  s|j
                  t        k  ryddl}|j                  j                  }d}d}d}d}|j                  |j                  |«      ||z  |z  «       | j                  «        y	J d
«       ‚)r\  r4  Fr   Nr7   rU   r   iõÿÿÿTzRunning not on Windows)rõ   r”   ÚgetwindowsversionÚmajorr   Úbuildr    ÚctypesÚwindllÚkernel32ÚSetConsoleModeÚGetStdHandlerR  )r¶   Úwinverre  rg  ÚENABLE_PROCESSED_OUTPUTÚENABLE_WRAP_AT_EOL_OUTPUTÚ"ENABLE_VIRTUAL_TERMINAL_PROCESSINGÚSTD_OUTPUT_HANDLEs           r-   rQ  z$FancyFormatter.initialize_win_colorsŽ  s±   € ô
 �<‰<˜7Ò"Ü×*Ñ*Ó,ˆFà—‘Ô:Ò:Ø—<‘<Ô"=Ò=àÛà—}‘}×-Ñ-ˆHØ&)Ð#Ø(+Ð%Ø14Ð.Ø #ÐØ×#Ñ#Ø×%Ñ%Ð&7Ó8Ø'Ø+ñ,à4ñ5ôð ×(Ñ(Ô*ØØ.Ð.Ó.ˆur/   c                óØ  — t         j                  dk(  }|st        sy	 	 t         j                  j	                  «       }t        j                  |¬«       t        j                  d«      }t        j                  d«      }t        j                  d	«      }t        j                  d
«      }t        j                  d«      }|r|r|r|r|sy|j                  «       | _        |j                  «       | _        |j                  «       | _        t!        |«      | _        t        j$                  |t
        j&                  «      j                  «       | _        t        j$                  |t
        j*                  «      j                  «       | _        t        j$                  |t
        j.                  «      j                  «       | _        t        j$                  |t
        j2                  «      j                  «       | _        y# t        j                  $ rJ t        dd«      5 }t        j                  |j	                  «       ¬«       ddd«       n# 1 sw Y   nxY wY �Œüw xY w# t
        j                  $ r Y yw xY w)r\  r4  F)Úfdz	/dev/nullÚrbNÚboldÚsmulÚsetafr9  Úsgr0T)rõ   r”   ÚCURSES_ENABLEDrö   Úfilenor7  Ú	setuptermÚioÚUnsupportedOperationr©   ÚerrorÚtigetstrr[   r_  r]  r^  r<  r`  r8  Ú
COLOR_BLUErV  ÚCOLOR_GREENrU  Ú	COLOR_REDrT  ÚCOLOR_YELLOWrW  )	r¶   Úis_winrp  r­   rr  Úunderr:  Úset_eseqÚnormals	            r-   rS  z%FancyFormatter.initialize_unix_colors«  s·  € ä—‘ Ñ(ˆÙ�Øð	ð(Ü—Z‘Z×&Ñ&Ó(�ô
 × Ñ  BÕ'ô �‰˜vÓ&ˆÜ—‘ Ó'ˆÜ—O‘O GÓ,ˆ	Ü—?‘? 5Ó)ˆÜ—‘ Ó(ˆá™¡9±¹fØà—m‘m“oˆŒØ—K‘K“MˆŒ	Ø—\‘\“^ˆŒ
Ü# HÓ-ˆŒÜ—L‘L ¬F×,=Ñ,=Ó>×EÑEÓGˆŒ	Ü—\‘\ )¬V×-?Ñ-?Ó@×GÑGÓIˆŒ
Ü—<‘< 	¬6×+;Ñ+;Ó<×CÑCÓEˆŒÜ—l‘l 9¬f×.AÑ.AÓB×IÑIÓKˆŒØøô3 ×*Ñ*ò 4Ü˜+ tÓ,ð 4°Ü×$Ñ$¨¯©«
Õ3÷4÷ 4ñ 4ýð4ûô
 �|‰|ò 	áð	úsF   ŸG3 ½I Ç3IÈ%I È7	IÉ I		ÉIÉI ÉIÉI ÉI)É(I)c                óÈ   — | j                   r|S |r| j                  }nd}|r|| j                  z  }|r|| j                  z  }|| j                  |   z   |z   | j
                  z   S )z2Apply simple color and style (underlined or bold).rÂ   )rO  r]  r^  r`  rX  r_  )r¶   r\   Úcolorrr  Ú	underlineÚdimÚstarts          r-   ÚstylezFancyFormatter.styleÑ  se   € ð �?Š?ØˆKÙØ—I‘I‰EàˆEÙØ�T—Z‘ZÑˆEÙØ�T—X‘XÑˆEØ�t—{‘{ 5Ñ)Ñ)¨DÑ0°4·;±;Ñ>Ð>r/   c                ó®   — |j                  «       }|j                  t        «      xr/ |j                  d«      xr t        |«      j	                  ddh«      S )Nú^ú~)Úlstripr)   r   ÚsetÚissubset)r¶   r]   Ús_lines      r-   Úis_marker_linezFancyFormatter.is_marker_lineæ  sL   € Ø—‘“ˆà�O‰OœJÓ'ò 1Ø×!Ñ! #Ó&ò1ä�F“×$Ñ$ c¨3 ZÓ0ð	
r/   Nc           	     ó  — |xs
 t        «       }|j                  «       }t        |«      D �]^  \  }}|j                  t        «      sId|v rE|j                  dd¬«      \  }}t        ||t        |«      t        d«      z   ¬«      }|dz   |z   ||<   Œe|j                  t        «      sŒ{| j                  |«      rŒ�|t        d }||dz      }	|	j                  d«      }
|
t        z
  }d	|	vrd}n|	|
|	j                  d	«      dz    }|t        z
  d
z
  }t        |||t        «      \  }}dt        z  |z   ||<   dt        |z   |z
  z  |z   }t        |«      t        ||   «      kD  r%t        |«      dkD  r|dt        ||   «      dz
   dz   }|||dz   <   �Œa |S )zHImprove readability by wrapping error messages and trimming source code.r	  úerror:r7   ©Úmaxsplitzerror: )r"  NrŒ  r�  é   r   rV   rz   )r  Úcopyr‚   r)   r   rO   r(  rF   r’  r   ÚindexÚrindexr   r   )r¶   rŸ   Úfixed_terminal_widthÚwidthÚnew_messagesr†   r{  Úlocr  Úmarker_lineÚmarker_columnÚcolumnÚmarkerr{   Úsource_liner~   Únew_marker_lines                    r-   Úfit_in_terminalzFancyFormatter.fit_in_terminalî  s¸  € ð %Ò<Ô(:Ó(<ˆØ—}‘}“ˆÜ! (Ó+ó 	6‰HˆAˆuà×#Ñ#¤JÔ/°JÀ%Ñ4GØ Ÿ;™; x¸!˜;Ó<‘��SÜ  U¼¸S»ÄCÈ	ÃNÑ9RÔS�Ø"%¨¡.°3Ñ"6�˜Q’Ø×!Ñ!¤*Õ-°d×6IÑ6IÈ%Õ6PàÔ3Ð4Ð5�Ø& q¨1¡u™o�Ø +× 1Ñ 1°#Ó 6�Ø&Ô)>Ñ>�Ø˜kÑ)Ø ‘Fð )¨¸×9KÑ9KÈCÓ9PÐSTÑ9TÐU�Fð  Ô"7Ñ7¸!Ñ;�Ü&6°u¸gÀvÌ}Ó&]Ñ#�˜Và"%Ô(=Ñ"=ÀÑ"K�˜Q‘à"%Ô)>ÀÑ)GÈ&Ñ)PÑ"QÐTZÑ"Z�Ü�Ó'¬#¨l¸1©oÓ*>Ò>Ä3ÀvÃ;ÐQRÂ?Ø&5Ð6P¼¸LÈ¹OÓ8LÈqÑ8PÐ&QÐTYÑ&Y�OØ&5�˜Q ™UÓ#ð9	6ð: Ðr/   c                óž  — |j                  t        «      r7| j                  |«      s| j                  |dd¬«      S | j                  |d«      S d|v rª|j	                  dd¬«      \  }}| j
                  r)|| j                  ddd¬	«      z   | j                  |«      z   S |j                  d
«      }|dk7  r||d }|d| }nd}|| j                  ddd¬	«      z   | j                  |«      z   | j                  |d«      z   S d|v rN|j	                  dd¬«      \  }}| j                  | j                  |«      «      }|| j                  dd«      z   |z   S |S )zBColorize an output line by highlighting the status and error code.rL  T)rˆ  rH  r	  r”  r7   r•  ©rr  ú[rL   NrÂ   rK  r  znote:rJ  )	r)   r   r’  rŠ  rO   rM  Úhighlight_quote_groupsÚrfindÚunderline_link)r¶   r{  rž  r  ÚcodeposÚcodeÚ	formatteds          r-   ÚcolorizezFancyFormatter.colorize  sm  € ð ×ÑœJÔ'Ø×&Ñ& uÔ-Ø—z‘z %¨°T�zÓ:Ð:Ø—:‘:˜e UÓ+Ð+Ø˜5Ñ Ø—{‘{ 8°a�{Ó8‰HˆC�Ø×$Ò$à˜$Ÿ*™* X¨u¸4˜*Ó@Ñ@À4×C^ÑC^Ð_bÓCcÑcðð —i‘i “nˆGØ˜"Š}Ø˜7˜8�}�Ø˜(˜7�m‘à�àØ—*‘*˜X u°4�*Ó8ñ9à×-Ñ-¨cÓ2ñ3ð —*‘*˜T 8Ó,ñ-ðð ˜%ÑØ—{‘{ 7°Q�{Ó7‰HˆC�Ø×3Ñ3°D×4GÑ4GÈÓ4LÓMˆIØ˜Ÿ™ G¨VÓ4Ñ4°yÑ@Ð@àˆLr/   c                óô   — |j                  d«      dz  r|S |j                  d«      }d}t        |«      D ]@  \  }}|dz  dk(  r|| j                  |d«      z  }Œ$|| j                  d|z   dz   dd¬«      z  }ŒB |S )z†Make groups quoted with double quotes bold (including quotes).

        This is used to highlight types, attribute names etc.
        r  rU   rÂ   r   rL  Tr§  )ÚcountrO   r‚   rŠ  )r¶   r  rÆ   r;   r†   Úparts         r-   r©  z%FancyFormatter.highlight_quote_groups3  sŽ   € ð
 �9‰9�S‹>˜AÒàˆJØ—	‘	˜#“ˆØˆÜ  Ó'ò 	G‰GˆAˆtØ�1‰u˜ŠzØ�t—z‘z $¨Ó/Ñ/‘à�t—z‘z #¨¡*¨sÑ"2°FÀ�zÓFÑF‘ð		Gð
 ˆ
r/   c                ó¼   — t        j                  d|«      }|s|S |j                  «       }|j                  «       }|d| | j	                  ||| dd¬«      z   ||d z   S )zuUnderline a link in a note message (if any).

        This assumes there is at most one link in the message.
        zhttps?://\S*NrL  T)r‡  )ÚreÚsearchr‰  ÚendrŠ  )r¶   ÚnoterY   r‰  r¶  s        r-   r«  zFancyFormatter.underline_linkD  sg   € ô
 —	‘	˜/¨4Ó0ˆÙØˆKØ—‘“ˆØ�i‰i‹kˆØ�F�Uˆ|˜dŸj™j¨¨e°C¨¸&ÈD˜jÓQÑQÐTXÐY\ÐY]ÐT^Ñ^Ð^r/   Tc                ón   — | j                   ryd|› dt        |«      › �}|s|S | j                  |dd¬«      S )z±Format short summary in case of success.

        n_sources is total number of files passed directly on command line,
        i.e. excluding stubs and followed imports.
        rÂ   zSuccess: no issues found in ú source filerI  Tr§  )rN  Úplural_srŠ  )r¶   Ú	n_sourcesÚ	use_colorr  s       r-   Úformat_successzFancyFormatter.format_successP  sE   € ð ×ÒØà,¨Y¨K°|ÄHÈYÓDWÐCXÐYˆÙØˆJØ�z‰z˜#˜w¨TˆzÓ2Ð2r/   )Úblockersr¼  c          
     ó¬   — d|› dt        |«      › d|› dt        |«      › �}|r|dz  }n|d|› dt        |«      › d�z  }|s|S | j                  |d	d
¬«      S )z)Format a short summary in case of errors.zFound z errorz in z filez$ (errors prevented further checking)z
 (checked r¹  ú)rH  Tr§  )rº  rŠ  )r¶   Ún_errorsÚn_filesr»  r¾  r¼  r  s          r-   Úformat_errorzFancyFormatter.format_error^  sy   € ð �x�j ¤x°Ó'9Ð&:¸$¸w¸iÀuÌXÐV]ÓM^ÐL_Ð`ˆÙØÐ9Ñ9‰Cà�Z 	˜{¨,´xÀ	Ó7JÐ6KÈ1ÐMÑMˆCÙØˆJØ�z‰z˜#˜u¨4ˆzÓ0Ð0r/   ©F)
rY  úIO[str]rZ  rÅ  rM  r@  rN  r@  rº   r»   ©rº   r@  )FFF)r\   rM   r†  z1Literal['red', 'green', 'blue', 'yellow', 'none']rr  r@  r‡  r@  rˆ  r@  rº   rM   )r]   rM   rº   r@  rÍ   )rŸ   ú	list[str]r›  ú
int | Nonerº   rÇ  )r{  rM   rº   rM   )r  rM   rº   rM   )r·  rM   rº   rM   )T)r»  r½   r¼  r@  rº   rM   )rÁ  r½   rÂ  r½   r»  r½   r¾  r@  r¼  r@  rº   rM   )rg   rh   ri   rj   r!   rR  rQ  rS  rŠ  r’  r¥  r¯  r©  r«  r½  rÃ  rk   r/   r-   rE  rE  ^  s  „ ñð \aðØðØ%,ðØ@DðØTXðà	óó8ó/ó:$ðT ØØð?àð?ð Að?ð ð	?ð
 ð?ð ð?ð 
ó?ó*
ð GKð#Ø!ð#Ø9Cð#à	ó#óJó@ó"
_ô3ð( Øñ1àð1ð ð1ð ð	1ð ð1ð ð1ð 
ô1r/   rE  c                ó¸   — | �| nt         } 	 t        j                  j                  | t        j                  j	                  |«      f«      | k(  S # t
        $ r Y yw xY w)NF)r   r¥   ru   Ú
commonpathr§   rA  )Útypeshed_dirÚfiles     r-   Úis_typeshed_filerÍ  r  sQ   € Ø#/Ð#;‘<Ä€LðÜ�w‰w×!Ñ! <´·±·±ÀÓ1FÐ"GÓHÈLÑXÐXøÜò Ùðús   ŒA A Á	AÁAc                ó  — d|vry| �| nt         } t        j                  j                  | d«      }	 t        j                  j	                  |t        j                  j                  |«      f«      |k(  S # t        $ r Y yw xY w)NÚstdlibF)r   r¥   ru   rE   rÊ  r§   rA  )rË  rÌ  Ú
stdlib_dirs      r-   Úis_stdlib_filerÑ  z  sp   € Ø�tÑàØ#/Ð#;‘<Ä€LÜ—‘—‘˜l¨HÓ5€JðÜ�w‰w×!Ñ! :¬r¯w©w¯©¸tÓ/DÐ"EÓFÈ*ÑTÐTøÜò Ùðús   ±A A2 Á2	A>Á=A>c                ó¾   — | j                  d«      syt        d„ t        j                  j	                  t        j                  j                  | «      «      D «       «      S )Nz.pyiFc              3  ó>   K  — | ]  }|j                  d «      –— Œ y­w)z-stubsN)r*   )Ú.0Ú	components     r-   ú	<genexpr>z'is_stub_package_file.<locals>.<genexpr>Š  s   è ø€ Òb°	ˆy×!Ñ! (×+Ñbùs   ‚)r*   Úanyr¥   ru   rO   r§   )rÌ  s    r-   Úis_stub_package_filerØ  †  s=   € à�=‰=˜Ô ØÜÑb¼R¿W¹W¿]¹]Ì2Ï7É7Ï?É?Ð[_ÓK`Ó=aÔbÓbÐbr/   c                ó   — | d uxr | dk(  S r1   rk   r3   s    r-   Úunnamed_functionrÚ  �  s   € Ø�tÐÒ+ ¨¡Ð+r/   c                óH   — t        t        j                  «       | z
  dz  «      S )Niè  )r½   r‘   Úperf_counter_ns)Út0s    r-   Útime_spent_usrÞ  ”  s    € Ü”×$Ñ$Ó&¨Ñ+¨tÑ3Ó4Ð4r/   c                óJ   — t        | t        «      r| n
t        | «      }|dk7  ryy)Nr7   ÚsrÂ   )Ú
isinstancer½   rF   )rà  r±  s     r-   rº  rº  ˜  s#   € Ü˜AœsÔ#‰A¬¨Q«€EØ�‚zØàr/   c                óÈ   — dj                  t        j                  dt        | «      «      «      }|j	                  d«      rd|dd vr|d   dk7  r	d|dd › d�S d	|› d	�S d
|› d
�S )zKReturns docstring correctly encapsulated in a single or double quoted form.r�   z(?<=[^\\])\\nrý   r  r7   rL   éþÿÿÿz"""z''z"")rE   r´  rO   rb   r)   )ÚdocstrÚdocstr_reprs     r-   Úquote_docstringræ     s�   € ð —)‘)œBŸH™HÐ%5´t¸F³|ÓDÓE€Kà×Ñ˜cÔ"ð �k ! BÐ'Ñ'¨K¸©O¸sÒ,BØ˜ Q rÐ*Ð+¨3Ð/Ð/Ø�K�= Ð#Ð#à�K�= Ð#Ð#r/   c                ó�  — t         �L|r"t         j                  t         j                  z  }nt         j                  }	 t        j                  | |¬«      S |r't        j                  | dd¬«      j                  d«      S t        j                  | dd¬«      j                  d«      S # t        $ r}t        |«      dk7  r‚ Y d }~Œmd }~ww xY w)	N)ÚoptionzInteger exceeds 64-bit rangerU   T)ÚindentÚ	sort_keysr¤   )ú,r
  )rê  Ú
separators)r   ÚOPT_INDENT_2ÚOPT_SORT_KEYSÚdumpsÚ	TypeErrorrM   Újsonr«   )rQ   ÚdebugÚdumps_optionr  s       r-   Ú
json_dumpsrô  ±  s®   € ÜÐÙÜ!×.Ñ.´×1EÑ1EÑE‰Lô "×/Ñ/ˆLð	Ü—<‘< ¨LÔ9Ð9ñ
 Ü�z‰z˜# a°4Ô8×?Ñ?ÀÓHÐHô �z‰z˜#¨¸*ÔE×LÑLÈWÓUÐUøô ò 	Ü�1‹vÐ7Ò7Øô 8ûð	ús   ¼B# Â#	CÂ,C Ã Cc                ób   — t         �t        j                  | «      S t        j                  | «      S rÍ   )r   Úloadsrñ  r-  s    r-   Ú
json_loadsr÷  Ç  s&   € ÜÐÜ�|‰|˜DÓ!Ð!Ü�:‰:�dÓÐr/   rÈ  Ú_AVAILABLE_THREADSc                 ó&   — t         j                  dvS )z§Can we start new threads?

    WebAssembly builds are typically single-threaded, and starting a thread
    fails with RuntimeError there, so we must not even try.
    )rG  Úwasi)rõ   r”   rk   r/   r-   Úcan_start_threadsrû  Ð  s   € ô �<‰<Ð5Ð5Ð5r/   c                 óÐ  — t         �t         S t        j                  «       } t        rt	        j                  d¬«      }nd}|r| rt        || «      }n|s| r|xs | }nd}d}t        j                  dk(  rt        j                  d«      }t        r5t        j                  dk7  r"t	        j                  «       j                  «       }|€J ‚|rt        |t        |«      «      }|a |S |}|a |S )zNDetermine number of physical cores that current process can use (best effort).NF)Úlogicalr   rì   r   rí   )rø  r¥   Ú	cpu_countÚPSUTIL_AVAILABLEÚpsutilÚminrõ   r”   Úsched_getaffinityÚProcessÚcpu_affinityrF   )Úos_cpu_countÚpsutil_cpu_countrþ  ÚaffinityÚavailable_threadss        r-   Úget_available_threadsr	  Ù  så   € ô Ð%Ü!Ð!ô —<‘<“>€LÝä!×+Ñ+°EÔ:ÑàÐá™LÜÐ(¨,Ó7‰	Ù	™\Ø$Ò4¨‰	ð ˆ	à,0€Hä
‡|�|�wÒÜ×'Ñ'¨Ó*ˆÝœCŸL™L¨HÒ4ä—>‘>Ó#×0Ñ0Ó2ˆàÐ Ð Ð ÙÜ 	¬3¨x«=Ó9Ðð +ÐØÐð &ÐØ*ÐØÐr/   c                óš  — t        | «      dz
  }|}|dk\  rFt        | |   «      }|t        d«      k(  s|t        d«      k(  rn|t        d«      k(  r|}|dz  }|dk\  rŒFd}|}|dk\  r*t        t        | |   «      «      }|dz  |z  }|dz  }|dk\  rŒ*||dz	  z  d	z  }||d
z	  z  }|dz  d	z  }||dz	  z  }|dz  d	z  }||d
z	  z  }t        |«      S )zÿHash the stem of a cache file path (everything before the first dot in the basename).

    This is a combined stem-extraction + hash function optimized for mypyc compilation.
    Uses only integer arithmetic, avoiding intermediate string allocations.
    r7   r   rï   ú\r6   é{   é!   é    l   ÿÿ é   l   kJ× é   l   5.e )rF   Úordr   r½   )rà  r†   r¶  r  Úhvs        r-   Úhash_path_stemr    s  € ô 	ˆA‹�‰
€AØ€CØ
ˆqŠ&Ü�Q�q‘T“ˆØ”�C“Š=˜A¤ T£šNØØ”�C“Š=ØˆCØ	ˆQ‰ˆð ˆq‹&ð €BØ€AØ
ˆqŠ&Ü”�A�a‘D“	‹NˆØ�2‰g˜‰]ˆØ	ˆQ‰ˆð ˆq‹&ð
 ��b‘‰/˜ZÑ	'€BØˆ"�‰(�N€BØ
ˆz‰/˜ZÑ	'€BØˆ"�‰(�N€BØ
ˆz‰/˜ZÑ	'€BØˆ"�‰(�N€BÜˆr‹7€Nr/   rÄ  )r+   rM   r,   r@  rº   r@  )r+   rM   rº   r@  )r:   rM   rº   rÇ  )r@   úIterable[str]rA   rM   rº   ú
str | None)r@   r  rA   rM   rº   ztuple[str, str] | None)rQ   r¼   rº   rM   )r\   Úbytesrº   útuple[str, int])rc   r  rº   rM   )rn   r  rº   rM   )ru   rM   rv   zCallable[[str], bytes]rº   zlist[str] | None)
r]   rM   r{   r½   r|   r½   r}   r½   rº   r  )rn   rM   rº   zlist[tuple[int, str]])rš   Úfloatr›   r@  rœ   údict[str | None, list[str]]r�   rM   r”   rM   rº   rM   )rš   r  r›   r@  rœ   r  ru   rM   r�   rM   r”   rM   rº   r»   )r¿   rM   rº   rM   )
rÃ   rM   rÄ   r½   rA   rM   rÅ   r@  rº   ztuple[str, bool])rÕ   ztype[object]rº   zSequence[str])Frk   )
râ   r¼   rã   r¼   rä   r@  rå   ztuple[str, ...]rº   r»   )ru   rM   rê   rM   rº   r@  )ru   rM   rc   rM   rº   rM   )rò   rM   ró   rM   rº   rM   )r   )rú   r½   rº   r»   )r+   rM   rº   rM   )r+   rM   r   zContainer[str]rº   rM   )r  rM   rº   r»   )rŸ   rÇ  rº   ztuple[int, int, int])r  rM   rº   rÇ  )rº   r½   )
r  rM   r{   r½   r"  r½   r#  r½   rº   rM   )r.  r  rº   rM   )r.  r  rº   r  )r9  r  rº   rM   rÆ  )rË  r  rÌ  rM   rº   r@  )rÌ  rM   rº   r@  )r+   r  rº   r@  )rÝ  r½   rº   r½   )rà  zint | Sizedrº   rM   )rä  rM   rº   rM   )rQ   r¼   rò  r@  rº   r  )r.  r  rº   r   )rà  rM   rº   r½   )lrj   Ú
__future__r   r*  ry  rñ  r¥   r´  r  rõ   r‘   Úcollections.abcr   r   r   r   r   Ú	importlibr	   Úimportlib_resourcesÚtypingr
   r   r   r   r   Úmypy_extensionsr   Ú__annotations__r   ÚImportErrorÚ_cursesr7  rv  r   rÿ  r   rM   Úfilesr   Úcompiler   r   r   r   r   r   r    Ú	frozensetr&   r.   r4   r<   rC   r?   rS   r`   rd   Ú	Exceptionrf   rq   rx   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/  r2  r<  rC  rE  rÍ  rÑ  rØ  rÚ  rÜ  Útime_refrÞ  rº  ræ  rô  r÷  rø  rû  r	  r  rk   r/   r-   ú<module>r(     sª  ðÚ 9å "ã Û 	Û Û 	Û 	Û Û 
Û ß JÕ JÝ 6ß 3Õ 3å àƒðÛðÛÛà€NðÛàÐñ ˆCƒL€áÐ3Ð-×3Ñ3°FÓ;¸jÑHÓI€ˆeÓ Ià�R—Z‘ZÐ aÓb€ˆUÓ bà Ð �uÓ  ØÐ/Ñ/€
ˆEÓ /Ø€�Ó ð €ˆuÓ ð &(Ð ˜UÓ 'Ø%*Ð ˜UÓ *á"ØQó€�ó ô
	9ó_ó
óó	+ó)ó$óô�)ô óó(ó"<ó@ð Ð �uó ð'Ð ˜eó ð
Ð �eó ð
'Ð ˜eó ð€ˆeó ð/Øð/àð/ð 2ð/ð ð	/ð
 ð/ð 	ó/ðd%Øð%àð%ð 2ð%ð ð	%ð
 ð%ð ð%ð 
ó%÷$ñ ó(&ð
?Øð?Ø"ð?Ø,/ð?ØKOð?àó?ð 68€Ð2Ó 7ó
ð VXðØ	ðØðØ)-ðØCRðà	óó@ ð, ‡<�<�7Ò˜cŸl™l¨hÒ6ô"ó"ôóó
ó 
ó5óó"ô!óH*ó'óó÷Q1ñ Q1óhó	ócó,ð ×Ñ€ó5óó$ô"Vó,ð "&Ð �JÓ %ó6ó%ôPøðW ò ØƒFðûð ò ØƒNðûð ò ØÓðús6   ÁI
 Á
I Á(I& É
IÉIÉI#É"I#É&I1É0I1