Ë
    pPêjm³  ã                  óÈ  — 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ZddlmZmZmZ ddlmZmZ ddlmZmZmZ ddlmZ ddlZddlZddlZddlm Z m!Z!m"Z" dd	l#m$Z$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/m0Z0m1Z1m2Z2m3Z3 ddl4m5Z5 ddl6m7Z7m8Z8 ddl9m:Z:m;Z; ddl<m=Z= ddl>m?Z?m@Z@ ddlAmBZB dZCdeDd<   e	jŠ                  dk(  rddlmFZF 	 d.	 	 	 	 	 	 	 	 	 d/d„ZGnd0d1d„ZH	 d.	 	 	 	 	 	 	 	 	 d/d„ZGdZIdeDd<   d2d„ZJd3d „ZKeLeMeMf   ZNd!eDd"<   eOeN   ZPd!eDd#<   eLePePf   ZQd!eDd$<    G d%„ d&«      ZRd'ZSdeDd(<   d4d)„ZT	 d5	 	 	 	 	 d6d*„ZUd7d+„ZVd8d,„ZW	 	 	 	 	 	 	 	 d9d-„ZXy):zžServer for mypy daemon mode.

This implements a daemon process which keeps useful state in memory
to enable fine-grained incremental reprocessing of changes.
é    )ÚannotationsN)ÚCallableÚSequenceÚSet)Úredirect_stderrÚredirect_stdout)ÚAnyÚFinalÚ	TypeAlias)Ú	b64encode)ÚWriteToConnÚreceiveÚsend)ÚInvalidSourceListÚcreate_source_list)ÚFileSystemCache)ÚFileDataÚFileSystemWatcher)ÚInspectionEngine)Ú	IPCServer)ÚBuildSourceÚFindModuleCacheÚSearchPathsÚcompute_search_paths)ÚOptions)ÚFineGrainedBuildManagerÚrefresh_suppressed_submodules)ÚSuggestionEngineÚSuggestionFailure)Úreset_global_state)ÚFancyFormatterÚcount_stats)Ú__version__Fr
   ÚMEM_PROFILEÚwin32)ÚSTARTUPINFOc                óà  — t         j                  ddd|dg}t        j                  | j	                  «       «      }|j                  dt        |«      j                  «       › d�«       |r|j                  d|› �«       |r|j                  d|› �«       t        «       }d	|_	        d
|_
        	 t        j                  |d|¬«       y
# t        j                  $ r}|j                  cY d}~S d}~ww xY w)aé  Create the daemon process via "dmypy daemon" and pass options via command line

        When creating the daemon grandchild, we create it in a new console, which is
        started hidden. We cannot use DETACHED_PROCESS since it will cause console windows
        to pop up when starting. See
        https://github.com/python/cpython/pull/4150#issuecomment-340215696
        for more on why we can't have nice things.

        It also pickles the options to be unpickled by mypy.
        z-mz
mypy.dmypyz--status-fileÚdaemonz--options-data="ú"z
--timeout=z--log-file=é   r   é   )ÚcreationflagsÚstartupinfoN)ÚsysÚ
executableÚpickleÚdumpsÚsnapshotÚappendr   Údecoder&   ÚdwFlagsÚwShowWindowÚ
subprocessÚPopenÚCalledProcessErrorÚ
returncode)ÚoptionsÚstatus_fileÚtimeoutÚlog_fileÚcommandÚpickled_optionsÚinfoÚes           úV/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/mypy/dmypy_server.pyÚ	daemonizerD   .   sÓ   € ô —>‘> 4¨°ÈÐU]Ð^ˆÜ Ÿ,™, w×'7Ñ'7Ó'9Ó:ˆØ�‰Ð)¬)°OÓ*D×*KÑ*KÓ*MÐ)NÈaÐPÔQÙØ�N‰N˜Z¨ yÐ1Ô2ÙØ�N‰N˜[¨¨
Ð3Ô4Ü‹}ˆØˆŒØˆÔð	 Ü×Ñ˜W°DÀdÕKØøÜ×,Ñ,ò 	 Ø—<‘<Õûð	 ús   Â+C ÃC-ÃC(Ã"C-Ã(C-c                ó  — t         j                  j                  «        t         j                  j                  «        t	        j
                  «       }|rDt	        j                  |d«      \  }}|dz  }|rt        d|«       | S |dz	  }|rt        d|«       |S 	 t	        j                  «        t	        j                  d«       t	        j                  dt        j                  «      }t	        j                  |d«       t	        j                  |d«       t	        j                  |d	«       t	        j                  |«       t	        j
                  «       }|rt	        j                  d«       |rlt        |d
d¬«      xt         _        t         _        t         j                  j                  «       }t	        j                  |d	«       t	        j                  |d«        | «        t	        j                  d«       y# t	        j                  d«       w xY w)z°Arrange to call func() in a grandchild of the current process.

        Return 0 for success, exit status for failure, negative if
        subprocess killed by signal.
        r   éÿ   zChild killed by signalé   zChild exit statusé   z	/dev/nullr*   é   Úa)Ú	bufferingN)r.   ÚstdoutÚflushÚstderrÚosÚforkÚwaitpidÚprintÚsetsidÚumaskÚopenÚO_RDWRÚdup2ÚcloseÚ_exitÚfileno)Úfuncr>   ÚpidÚnpidÚstsÚsigÚdevnullÚfds           rC   Ú_daemonize_cbrb   M   s`  € ô 	�
‰
×ÑÔÜ�
‰
×ÑÔÜ�g‰g‹iˆÙäŸ
™
 3¨Ó*‰IˆD�#Ø˜‘*ˆCÙÜÐ.°Ô4Ø�t�Ø˜‘(ˆCÙÜÐ)¨3Ô/ØˆJð	Ü�I‰IŒKÜ�H‰H�TŒNÜ—g‘g˜k¬2¯9©9Ó5ˆGÜ�G‰G�G˜QÔÜ�G‰G�G˜QÔÜ�G‰G�G˜QÔÜ�H‰H�WÔÜ—'‘'“)ˆCÙä—‘˜”áÜ*.¨x¸ÈÔ*JÐJ””
œSœZÜ—Z‘Z×&Ñ&Ó(�Ü—‘˜˜A”Ü—‘˜˜A”ÙŒFô �H‰H�Q�KøŒB�H‰H�Q�Kús   ÂEG2 Ç2H	c                óD   — t        t        | ||«      j                  |«      S )z¬Run the mypy daemon in a grandchild of the current process

        Return 0 for success, exit status for failure, negative if
        subprocess killed by signal.
        )rb   ÚServerÚserve)r;   r<   r=   r>   s       rC   rD   rD   z   s    € ô œV G¨[¸'ÓB×HÑHÈ(ÓSÐSó    ÚdmypyÚCONNECTION_NAMEc                óŒ  — t         j                  j                  dg| z   dd¬«      \  }}|j                  rt	        d«       |j
                  rt	        d«       d |_        |j                  st        j                  d«       |j                  dvrt        j                  d	«       |j                  st        j                  d
«       |S )Nú-iFT)Úrequire_targetsÚserver_optionszRdmypy: Ignoring report generation settings. Start/restart cannot generate reports.zxdmypy: Ignoring report generation settings. Start/restart does not support --junit-xml. Pass it to check/recheck insteadz8dmypy: start/restart should not disable incremental mode)ÚskipÚerrorÚnormalz*dmypy: follow-imports=silent not supportedz2dmypy: disabling local-partial-types not supported)ÚmypyÚmainÚprocess_optionsÚreport_dirsrR   Ú	junit_xmlÚincrementalr.   ÚexitÚfollow_importsÚlocal_partial_types)ÚflagsÚallow_sourcesÚ_r;   s       rC   Úprocess_start_optionsr|   Š   s®   € Ü—‘×*Ñ*Ø	ˆ�‰¨¸dð +ó �J€A€wð ×ÒÜÐbÔcØ×ÒÜð[ô	
ð !ˆÔØ×ÒÜ�‰ÐKÔLØ×ÑÐ%@Ñ@Ü�‰Ð=Ô>Ø×&Ò&Ü�‰ÐEÔFØ€Nrf   c                ó$   — | j                  d«      S )z=Can we skip looking for newly unsuppressed imports to module?z
encodings.)Ú
startswith©Úmodules    rC   Úignore_suppressed_importsr�   Ÿ   s   € ð
 ×Ñ˜\Ó*Ð*rf   Ú
_TypeAliasÚModulePathPairÚModulePathPairsÚChangesAndRemovalsc                  óF  — e 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„Z		 	 	 	 	 	 	 	 	 	 d'd	„Z
	 	 d(	 	 	 	 	 	 	 	 	 	 	 d)d
„Z	 	 	 	 	 	 	 	 	 	 d*d„Zd"d„Zd+d„Zd,d„Z	 	 	 	 	 	 	 	 d-d„Z	 	 	 d.	 	 	 	 	 	 	 	 	 d/d„Z	 d0	 	 	 	 	 d1d„Z	 	 	 	 	 	 	 	 	 	 d2d„Z	 	 	 	 	 	 d3d„Z	 	 	 	 	 	 	 	 d4d„Z	 	 	 	 	 	 	 	 	 	 d5d„Z	 	 d6	 	 	 	 	 	 	 	 	 d7d„Zd8d„Z	 	 	 	 	 	 	 	 d9d„Zd:d„Z	 	 	 	 	 	 d;d„Z	 	 	 	 	 	 d<d„Z	 	 	 	 	 	 	 d=	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d>d„Zd?d„Zd%d„Zy)@rd   Nc                ó  — || _         |j                  «       | _        || _        d| _        t
        j                  j                  |«      rt        j                  |«       t        «       | _
        d|_        d|_        d|_        d|_        |j                  rd|_        nt
        j"                  |_        d|_        d|_        || _        t-        t.        j0                  t.        j2                  |j4                  «      | _        y)z2Initialize the server with the desired mypy flags.NTr   )r;   r2   Úoptions_snapshotr=   Úfine_grained_managerrO   ÚpathÚisfileÚunlinkr   ÚfscacheÚraise_exceptionsru   Úfine_grained_incrementalÚshow_tracebackÚuse_fine_grained_cacheÚcache_fine_grainedr`   Ú	cache_dirrx   Únum_workersr<   r!   r.   rL   rN   Úhide_error_codesÚ	formatter)Úselfr;   r<   r=   s       rC   Ú__init__zServer.__init__°   sÊ   € àˆŒà '× 0Ñ 0Ó 2ˆÔØˆŒØDHˆÔ!ä�7‰7�>‰>˜+Ô&Ü�I‰I�kÔ"ä&Ó(ˆŒà#'ˆÔ Ø"ˆÔØ+/ˆÔ(Ø!%ˆÔØ×)Ò)ð *.ˆGÕ&ä "§
¡
ˆGÔð '+ˆÔ#ð  ˆÔØ&ˆÔô (¬¯
©
´C·J±JÀ×@XÑ@XÓYˆ�rf   c                óž   — | j                   j                  d   › d| j                   j                  d   › �}| j                   j                  |dœS )Nr   r{   r*   )ÚplatformÚpython_version)r;   r›   rš   )r—   Ú
py_versions     rC   Ú_response_metadatazServer._response_metadataÔ   sH   € ØŸ™×3Ñ3°AÑ6Ð7°q¸¿¹×9TÑ9TÐUVÑ9WÐ8XÐYˆ
Ø ŸL™L×1Ñ1ÀZÑPÐPrf   c                óì  — d}t        t        | j                  «      }t        j                  }t        j
                  }	 t        | j                  d«      5 }t        j                  t        j                  «       |j                  dœ|«       |j                  d«       ddd«       	 |5  t        |«      }t        |dt        j                  j!                  «       «      t        _        t        |dt        j
                  j!                  «       «      t        _        i }d|vrd	d
i}n>|d   }t#        |t$        «      sd	di}n$|j'                  d«      }	 | j)                  ||«      }d|d<   	 |j5                  | j7                  «       «       t9        ||«       |dk(  rt=        «        t        j>                  d«       ddd«       �Œ# 1 sw Y   �Œ%xY w# t*        $ rl t-        j.                  t        j0                  «       Ž }d	ddj3                  |«      z   i}|j5                  | j7                  «       «       d|d<   t9        ||«       ‚ w xY w# t:        $ r Y Œ¾w xY w# 1 sw Y   ŒŸxY w# |t        _        |t        _        |dk7  rt        j@                  | j                  «       	 |jC                  «        n# t:        $ r Y nw xY wt        j0                  «       }	|	d   r|	d   tD        urt-        jF                  |	Ž  w w w xY w)z2Serve requests, synchronously (no thread or fork).NÚw)r\   Úconnection_nameú
TrL   rN   r?   rn   zNo command found in requestzCommand is not a stringzDaemon crashed!
Ú ÚfinalÚstopr   )$r   rh   r=   r.   rL   rN   rU   r<   ÚjsonÚdumprO   Úgetpidr    Úwriter   r   ÚisattyÚ
isinstanceÚstrÚpopÚrun_commandÚ	ExceptionÚ	tracebackÚformat_exceptionÚexc_infoÚjoinÚupdater�   r   ÚOSErrorr    rv   rŒ   ÚcleanupÚ
SystemExitÚprint_exception)
r—   r?   ÚserverÚorig_stdoutÚorig_stderrÚfÚdataÚrespÚtbr±   s
             rC   re   zServer.serveØ   s‰  € ð ˆÜœ?¨D¯L©LÓ9ˆÜ—j‘jˆÜ—j‘jˆð7	5Ü�d×&Ñ&¨Ó,ð °Ü—	‘	¤"§)¡)£+À&×BXÑBXÑYÐ[\Ô]Ø—‘˜”÷ð Øñ $Ü" 6›?�DÜ!,¨V°X¼s¿z¹z×?PÑ?PÓ?RÓ!S”C”JÜ!,¨V°X¼s¿z¹z×?PÑ?PÓ?RÓ!S”C”JØ+-�DØ ¨Ñ,Ø 'Ð)FÐG™à"& y¡/˜Ü)¨'´3Ô7Ø$+Ð-FÐ#G™Dà&*§h¡h¨yÓ&9˜Gð	&Ø'+×'7Ñ'7¸ÀÓ'F ð %)�D˜‘MðØŸ™ D×$;Ñ$;Ó$=Ô>Ü˜V TÔ*ð  &Ò(Ü*Ô,ÜŸ™ œ÷?$ñ ÷ñ ûô& $-ò &ä%.×%?Ñ%?ÄÇÁÃÐ%P Ø(/Ð1DÀrÇwÁwÈrÃ{Ñ1RÐ'S Ø $§¡¨D×,CÑ,CÓ,EÔ FØ04  W¡Ü $ V¨TÔ 2Ø %ð&ûô #ò Ùðú÷7$ð $ûðD %ŒCŒJØ$ŒCŒJð ˜&Ò Ü—	‘	˜$×*Ñ*Ô+ðØ—‘Õ øÜò Ùðúä—|‘|“~ˆHØ˜Š{˜x¨™{´*Ñ<Ü×)Ñ)¨8Ò4ð  =ˆ{úsž   ¾I ÁAF>ÂI Â&B&IÅGÅIÅ%+IÆ$IÆ4
I Æ>GÇI ÇA5I É IÉ	IÉIÉIÉIÉIÉI É;K3ÊJ+Ê*K3Ê+	J7Ê4K3Ê6J7Ê7<K3c                óœ   — d|z   }t        | j                  |d«      }|€dd|› d�iS |dvr|d= |d=  || fi |¤Ž}t        |t        «      sJ ‚|S )	z)Run a specific command from the registry.Úcmd_Nrn   zUnrecognized command 'ú'>   ÚrunÚcheckÚrecheckÚis_ttyÚterminal_width)ÚgetattrÚ	__class__rª   Údict)r—   r?   r¼   ÚkeyÚmethodÚrets         rC   r­   zServer.run_command  su   € à�wÑˆÜ˜Ÿ™¨¨dÓ3ˆØˆ>ØÐ5°g°Y¸aÐ@ÐAÐAàÐ9Ñ9à˜�NØÐ)Ð*Ù˜Ñ& Ñ&ˆCÜ˜c¤4Ô(Ð(Ð(ØˆJrf   c                ó$  — i }|j                  t        «       «       |ret        | d«      r| j                  j	                  «       ni }t        j                  |«      }t        |d«      5 }|j                  |«       ddd«       |S |S # 1 sw Y   |S xY w)zReturn daemon status.Ú	fswatcherrŸ   N)	r³   Úget_meminfoÚhasattrrÎ   Údump_file_datar¥   r1   rU   r¨   )r—   Úfswatcher_dump_fileÚresr¼   Úsr»   s         rC   Ú
cmd_statuszServer.cmd_status*  sz   € à!#ˆØ�
‰
”;“=Ô!ÙÜ6=¸dÀKÔ6P�4—>‘>×0Ñ0Ô2ÐVXˆDä—
‘
˜4Ó ˆAÜÐ)¨3Ó/ð °1Ø—‘˜”
÷àˆ
ˆsˆ
÷àˆ
ús   Á'BÂBc                óD   — t        j                  | j                  «       i S )zStop daemon.)rO   rŒ   r<   ©r—   s    rC   Úcmd_stopzServer.cmd_stop6  s   € ô 	�	‰	�$×"Ñ"Ô#Øˆ	rf   c           
     óœ  — t        j                  «       }t        j                  «       }	 t        |«      5  t        |«      5  t        j
                  j                  dgt        |«      z   dd| j                  dt        j                  ¬«      \  }}	ddd«       ddd«       	j                  | j                  «      sddiS t        |k7  rddiS | j                  ri| j                  j                  }
|
j                   }t        j"                  j%                  |	|
j&                  t(        j*                  d	¬
«      \  }}||k7  rddiS | j7                  |||«      S # 1 sw Y   ŒÆxY w# 1 sw Y   ŒÊxY w# t,        $ r}dt/        |«      ddœcY d}~S d}~wt0        $ r6}|j3                  «       |j3                  «       |j4                  dœcY d}~S d}~ww xY w)z6Check a list of files, triggering a restart if needed.rj   Tzmypy-daemon)rk   rl   r�   ÚprogramÚheaderNÚrestartzconfiguration changedzmypy version changed© )Úextra_pluginszplugins changedr¢   rI   ©ÚoutÚerrÚstatus)ÚioÚStringIOr   r   rp   rq   rr   Úlistr�   ÚargparseÚSUPPRESSÚcompare_stablerˆ   r#   r‰   ÚmanagerÚplugins_snapshotÚbuildÚload_pluginsÚerrorsr.   rL   r   r«   r¶   ÚgetvalueÚcoderÃ   )r—   ÚversionÚargsÚexport_typesrÅ   rÆ   rN   rL   Úsourcesr;   ré   Ústart_plugins_snapshotr{   Úcurrent_plugins_snapshotrá   rB   s                   rC   Úcmd_runzServer.cmd_run?  s¬  € ô —‘“ˆÜ—‘“ˆð	Zô ! Ó(ñ 	Ü$ VÓ,ñ Ü'+§y¡y×'@Ñ'@Ø˜¤ d£Ñ+Ø(,Ø'+Ø $§¡Ø -Ü'×0Ñ0ð (Aó (Ñ$�G˜W÷÷	ð ×)Ñ)¨$×*?Ñ*?Ô@Ø!Ð#:Ð;Ð;Ü˜gÒ%Ø!Ð#9Ð:Ð:Ø×(Ò(Ø×3Ñ3×;Ñ;�Ø)0×)AÑ)AÐ&Ü.2¯j©j×.EÑ.EØ˜WŸ^™^¬S¯Z©ZÀrð /Fó /Ñ+�Ð+ð ,Ð/EÒEØ%Ð'8Ð9Ð9ð
 �z‰z˜' <°¸ÓHÐH÷5ð ú÷	ð 	ûô. !ò 	=Ø¤c¨#£h¸!Ñ<Õ<ûÜò 	ZØ!Ÿ?™?Ó,°V·_±_Ó5FÐRS×RXÑRXÑYÕYûð	Zúsl   ªE, µE ÁAEÂE Â&E, Â>E, ÃA4E, ÅE	ÅE Å E)Å%E, Å,	GÅ5F	ÆGÆ	GÆ+GÇ GÇGc                ó¸   — 	 t        || j                  | j                  «      }| j                  ||||«      S # t        $ r}dt	        |«      ddœcY d}~S d}~ww xY w)zCheck a list of files.r¢   rI   rß   N)r   r;   r�   r   r«   rÃ   )r—   Úfilesrò   rÅ   rÆ   ró   rá   s          rC   Ú	cmd_checkzServer.cmd_checkj  sW   € ð	=Ü(¨°·±¸d¿l¹lÓKˆGð �z‰z˜' <°¸ÓHÐHøô !ò 	=Ø¤c¨#£h¸!Ñ<Õ<ûð	=ús   ‚!7 ·	AÁ AÁAÁAc                ó:  — t        j                   «       }| j                  sddiS | j                  }|r6t        |«      }|D �	cg c]   }	|	j                  sŒ|	j                  |vsŒ|	‘Œ" }}	|ru|j                  d„ d¬«       |D �	ch c]  }	|	j                  sŒ|	j                  ’Œ }
}	|D �cg c]	  }||
vsŒ|‘Œ }}	 t        || j                  | j                  «      }||z   }t        j                   «       }| j                  j                  }|j                  d
||z
  d›d�«       | j                  j                  }| j                  j                  xs || j                  _        | j                  «       s| j                  ||||¬«      }n|€|�J ‚| j!                  ||¬«      }| j#                  ||||«      }| j%                  «        | j'                  |«       || j                  _        |S c c}	w c c}	w c c}w # t        $ r}dt        |«      ddœcY d	}~S d	}~ww xY w)zÐCheck the same list of files we checked most recently.

        If remove/update is given, they modify the previous list;
        if all are None, stat() is called for each file in the previous list.
        rn   z7Command 'recheck' is only valid after a 'check' commandc                óF   — t         j                  j                  | «      d   S )Nr*   )rO   rŠ   Úsplitext)r»   s    rC   ú<lambda>z$Server.cmd_recheck.<locals>.<lambda>Š  s   € ¤b§g¡g×&6Ñ&6°qÓ&9¸!Ñ&<€ rf   T)rÊ   Úreverser¢   rI   rß   Nz%fine-grained increment: cmd_recheck: ú.3frÔ   ©Úexplicit_export_types)Útimer‰   Úprevious_sourcesÚsetrŠ   Úsortr   r;   r�   r   r«   ré   Úlogrò   Úfollowing_importsÚfine_grained_incrementÚ%fine_grained_increment_follow_importsÚincrement_outputÚflush_cachesÚupdate_stats)r—   rÅ   rÆ   rò   Úremover³   Út0ró   ÚremovalsrÔ   ÚknownÚpÚaddedÚadded_sourcesrá   Út1ré   Úold_export_typesÚmessagesrÓ   s                       rC   Úcmd_recheckzServer.cmd_recheckt  s   € ô �Y‰Y‹[ˆØ×(Ò(ØÐVÐWÐWØ×'Ñ'ˆÙÜ˜6“{ˆHØ")ÖO˜Q¨Q¯V«V¸¿¹ÀhÒ8N’qÐOˆGÐOÙà�K‰KÑ<ÀdˆKÔKà%,Ö7 °·³�Q—V“VÐ7ˆEÐ7Ø &Ö9˜1¨!°5ª.’QÐ9ˆEÐ9ðAÜ 2°5¸$¿,¹,ÈÏÉÓ U�ð  Ñ-ˆGÜ�Y‰Y‹[ˆØ×+Ñ+×3Ñ3ˆØ�‰Ð;¸BÀ¹GÀC¸=ÈÐJÔKØŸ<™<×4Ñ4ÐØ$(§L¡L×$=Ñ$=Ò$MÀˆ�‰Ô!Ø×%Ñ%Ô'Ø×2Ñ2Ø˜ ¸|ð 3ó ‰Hð �> f nÐ4Ð4Ø×AÑAØ¨|ð Bó ˆHð ×#Ñ# H¨g°v¸~ÓNˆØ×ÑÔØ×Ñ˜#ÔØ$4ˆ�‰Ô!Øˆ
ùò= Pùò
 8ùÚ9øô %ò AØ!¬#¨c«(¸aÑ@Õ@ûðAúsH   ÁG)ÁG)Á#G)ÂG.ÂG.Â)	G3Â3G3Â:!G8 Ç8	HÈHÈHÈHc                ó¾  — | j                   j                  }| j                   j                  xs || j                   _        | j                  s| j                  |||«      }nK| j	                  «       s| j                  ||¬«      }n| j                  ||¬«      }| j                  ||||«      }| j                  «        | j                  |«       || j                   _        |S )zÚCheck using fine-grained incremental mode.

        If is_tty is True format the output nicely with colors and summary line
        (unless disabled in self.options). Also pass the terminal_width to formatter.
        r   )
r;   rò   r‰   Úinitialize_fine_grainedr  r  r	  r
  r  r  )r—   ró   rò   rÅ   rÆ   r  rÓ   r  s           rC   rÃ   zServer.check§  sÌ   € ð  Ÿ<™<×4Ñ4ÐØ$(§L¡L×$=Ñ$=Ò$MÀˆ�‰Ô!Ø×(Ò(Ø×.Ñ.¨w¸ÀÓO‰Cà×)Ñ)Ô+Ø×6Ñ6°wÐVbÐ6Óc‘à×EÑEØ°<ð Fó �ð ×'Ñ'¨°'¸6À>ÓRˆCØ×ÑÔØ×Ñ˜#ÔØ$4ˆ�‰Ô!Øˆ
rf   c                ó†   — | j                   j                  «        | j                  r| j                  j                  «        y y ©N)r�   rM   r‰   Úflush_cacher×   s    rC   r  zServer.flush_cachesÀ  s2   € Ø�‰×ÑÔØ×$Ò$Ø×%Ñ%×1Ñ1Õ3ð %rf   c                ó–   — | j                   r=| j                   j                  }|j                  «        |j                  |d<   i |_        y y )NÚstats)r‰   ré   Ú
dump_statsr  )r—   rÓ   ré   s      rC   r  zServer.update_statsÅ  sA   € Ø×$Ò$Ø×/Ñ/×7Ñ7ˆGØ×ÑÔ Ø"Ÿ=™=ˆC�‰LØˆG�Mð	 %rf   c                ó4   — | j                   j                  dk(  S )zAre we following imports?ro   )r;   rw   r×   s    rC   r  zServer.following_importsÌ  s   € ð �|‰|×*Ñ*¨hÑ6Ð6rf   c           
     óN  — t        | j                  «      | _        t        j                  «       }| j	                  |«       t        j                  «       }	 t
        j                  j                  || j                  | j                  ¬«      }|j                  }t        |«      | _        t        |«      }| j!                  «       r1t#        | j                  j$                  |«      }| j	                  |«       || _        |j(                  �r7t        j                  «       }| j                  j$                  j+                  «       D ]x  }|j,                  }|€Œ|j.                  €J ‚| j                  j1                  |j.                  t3        t5        |j6                  «      |j8                  |j:                  ¬«      «       Œz | j=                  |«      \  }}|| j?                  | j                  j$                  tA        «       | j                  jB                  jD                  «      z  }| j                  j$                  j+                  «       D ]H  }|jG                  «       rŒ|j.                  €J ‚|jI                  |jJ                  |j.                  f«       ŒJ t        j                  «       }| j                  jM                  ||«      }| j!                  «       r| jO                  |«      }t        j                  «       }| j                  jB                  jQ                  ||z
  ||z
  ||z
  ||z
  t        |«      t        |«      z   ¬«       n| j                  j=                  «        tR        rdd	l*m+}  |d
¬«       tY        |«      \  }}}|r|t        |«      k  rdnd}| j[                  ||||«      }dj                  d„ |D «       «      d|dœS # t
        j                  j                  $ rG}dj                  d„ |j                  D «       «      }|j                  r|d}
}	nd|}
}	|	|
ddœcY d }~S d }~ww xY w)N)ró   r;   r�   r¢   c              3  ó&   K  — | ]	  }|d z   –— Œ y­w©r¡   NrÝ   ©Ú.0rÔ   s     rC   ú	<genexpr>z1Server.initialize_fine_grained.<locals>.<genexpr>Û  s   è ø€ Ò:¨!˜Q �XÑ:ùó   ‚rI   rß   )Úst_mtimeÚst_sizeÚhash)Úupdate_sources_timeÚ
build_timeÚfind_changes_timeÚfg_update_timeÚfiles_changedr   )Úprint_memory_profileF)Úrun_gcr*   c              3  ó&   K  — | ]	  }|d z   –— Œ y­wr#  rÝ   r$  s     rC   r&  z1Server.initialize_fine_grained.<locals>.<genexpr>'  ó   è ø€ Ò:¨A˜q 4�xÑ:ùr'  ).r   r�   rÎ   r  Úupdate_sourcesrp   rë   r;   rí   ÚCompileErrorr²   r  Ú
use_stdoutr   r‰   Úlenr  Úfind_all_sources_in_buildÚgraphr  Ú
used_cacheÚvaluesÚmetarŠ   Úset_file_datar   ÚfloatÚmtimeÚsizer*  Úfind_changedÚfind_added_suppressedr  ré   Úsearch_pathsÚis_freshr3   Úidr³   r	  Ú	add_statsr$   Úmypy.memprofiler0  r"   Úpretty_messages)r—   ró   rÅ   rÆ   r  r  ÚresultrB   Úoutputrà   rá   r  Úoriginal_sources_lenÚt2Ústater<  ÚchangedÚremovedÚt3Út4r0  Ú__Ún_notesrâ   s                           rC   r  zServer.initialize_fine_grainedÑ  sq  € ô +¨4¯<©<Ó8ˆŒÜ�Y‰Y‹[ˆØ×Ñ˜GÔ$Ü�Y‰Y‹[ˆð	9Ü—Z‘Z×%Ñ%¨g¸t¿|¹|ÐUY×UaÑUaÐ%ÓbˆFð —=‘=ˆÜ$;¸FÓ$CˆÔ!ä" 7›|ÐØ×!Ñ!Ô#Ü/°×0IÑ0I×0OÑ0OÐQXÓYˆGØ×Ñ Ô(à 'ˆÔð
 ×ÓÜ—‘“ˆBð ×2Ñ2×8Ñ8×?Ñ?ÓAò �Ø—z‘z�Ø�<ØØ—z‘zÐ-Ð-Ð-Ø—‘×,Ñ,Ø—J‘JÜ¤e¨D¯J©JÓ&7ÀÇÁÐQU×QZÑQZÔ[õðð  $×0Ñ0°Ó9ÑˆG�WØ�t×1Ñ1Ø×)Ñ)×/Ñ/Ü“Ø×)Ñ)×1Ñ1×>Ñ>óñ ˆGð ×2Ñ2×8Ñ8×?Ñ?ÓAò ;�Ø—~‘~Õ'Ø Ÿ:™:Ð1Ð1Ð1Ø—N‘N E§H¡H¨e¯j©jÐ#9Õ:ð;ô
 —‘“ˆBà×0Ñ0×7Ñ7¸ÀÓIˆHà×%Ñ%Ô'à×EÑEÀgÓN�ä—‘“ˆBØ×%Ñ%×-Ñ-×7Ñ7Ø$&¨¡GØ ™7Ø"$ r¡'Ø! B™wÜ! '›l¬S°«\Ñ9ð 8õ ð �N‰N×'Ñ'Ô)åÝ<á ¨Õ.ä% hÓ/‰ˆˆG�RÙ 7¬S°«]Ò#:‘Àˆà×'Ñ'¨Ð2FÈÐP^Ó_ˆØ—w‘wÑ:°Ô:Ó:À2ÐQWÑXÐXøô[ �{‰{×'Ñ'ò 	9Ø—W‘WÑ:¨q¯z©zÔ:Ó:ˆFØ�|Š|Ø! 2�S‘à˜v�S�Ø s°aÑ8Õ8ûð	9ús   Á6O  Ï P$Ï<PÐP$ÐP$c                ó>  — | j                   €J ‚| j                   j                  }t        j                  «       }|€(|€&| j                  |«       | j	                  |«      \  }}n| j                  ||xs g |xs g «      \  }}|rt        ||«       || j                  | j                   j                  t        «       |j                  «      z  }t        ||j                  |j                  «      |_
        t        j                  «       }	|j                  d|	|z
  d›d�«       | j                   j                  ||«      }
t        j                  «       }|j                  d||	z
  d›d�«       |j!                  |	|z
  ||	z
  t#        |«      t#        |«      z   ¬«       || _        |
S )a  Perform a fine-grained type checking increment.

        If remove and update are None, determine changed paths by using
        fswatcher. Otherwise, assume that only these files have changes.

        Args:
            sources: sources passed on the command line
            remove: paths of files that have been removed
            update: paths of files that have been changed or created
            explicit_export_types: --export-type was passed in a check command
              (as opposite to being set in dmypy start)
        ú&fine-grained increment: find_changed: rÿ   rÔ   ú fine-grained increment: update: )r-  r.  r/  )r‰   ré   r  r4  rA  Úupdate_changedÚadd_all_sources_to_changedrB  r9  r  rC  r   r;   Údata_dirr  r³   rF  r7  r  )r—   ró   r  r³   r  ré   r  rN  rO  r  r  rL  s               rC   r  zServer.fine_grained_increment)  sˆ  € ð& ×(Ñ(Ð4Ð4Ð4Ø×+Ñ+×3Ñ3ˆä�Y‰Y‹[ˆØˆ>˜f˜nð ×Ñ Ô(Ø#×0Ñ0°Ó9ÑˆG‘Wð  $×2Ñ2°7¸FºLÀbÈ&Ê,ÐTVÓWÑˆG�WÙ ô ' w°Ô8Ø�4×-Ñ-Ø×%Ñ%×+Ñ+¬S«U°G×4HÑ4Hó
ñ 	
ˆô  4°G¸W¿_¹_Èg×N^ÑN^Ó_ˆÔÜ�Y‰Y‹[ˆØ�‰Ð<¸RÀ"¹WÀS¸MÈÐKÔLØ×,Ñ,×3Ñ3°G¸WÓEˆÜ�Y‰Y‹[ˆØ�‰Ð6°r¸B±w¸s°mÀ1ÐEÔFØ×ÑØ  2™gØ ™7Ü˜g›,¬¨W«Ñ5ð 	ô 	
ð !(ˆÔØˆrf   c           	     ó€  ‡— t        j                   «       }| j                  €J ‚| j                  Š‰j                  }‰j                  }t	        |j                  «       «      }| j                  |«       | j                  j                  «       }t        ||j                  |j                  «      |_        t        j                   «       }|j                  d||z
  d›d�«       |D �	ch c]  }	|	j                  ’Œ }
}	| j                  |||
|«      \  }}| j!                  ||«       |rt#        ||«       |j%                  |«       ‰j'                  |g d¬«      }|j)                  «       }|r˜|j+                  «       }|d   |vrŒ| j-                  ||«      }|D �	cg c]  }	|	j                  |
vsŒ|	‘Œ }}	| j                  |||
|«      \  }}| j                  |«       ‰j'                  |g d¬«      }|j%                  |«       |rŒ˜t        j                   «       }dˆfd„}t	        |j/                  «       «      D ]8  \  }}t1        ||j2                  ‰j4                  || j6                  |«      }|€Œ7|}Œ: t        j                   «       }	 | j9                  ||
|j                  «      }|sn‹|D �cg c]  }t;        |d   |d   d¬«      ‘Œ }}|j%                  |«       | j                  |«       ‰j'                  |g d¬«      }|D ].  \  }}t1        ||‰j4                  || j6                  |«      }|€Œ-|}Œ0 Œ«t        j                   «       }g }|D ]2  }||vrŒ||
vsŒ||   j2                  }|€J ‚|j=                  ||f«       Œ4 |r‰j'                  g |«      }t?        |«       tA        |«      | _!        | j                  | jB                  «       | j                  j                  «        t        j                   «       }|j                  d	||z
  d›d�«       |jE                  ||z
  ||z
  ||z
  ||z
  ||z
  ¬
«       |S c c}	w c c}	w c c}w )z0Like fine_grained_increment, but follow imports.rU  rÿ   rÔ   T©Úfollowedr   c                ó2   •— ‰j                  | |fgg d¬«      S )NTr[  )r³   )r€   rŠ   r‰   s     €rC   Úrefresh_filezBServer.fine_grained_increment_follow_imports.<locals>.refresh_fileœ  s"   ø€ Ø'×.Ñ.°¸°Ð/?ÀÈdÐ.ÓSÐSrf   r*   rV  )r-  r.  Úrefresh_suppressed_timeÚfind_added_suppressed_timeÚcleanup_time)r€   r«   rŠ   r«   Úreturnú	list[str])#r  r‰   r9  ré   rå   Úkeysr4  rÎ   rA  r   r;   rY  rC  r  r€   Úfind_reachable_changed_modulesÚadd_explicitly_newrX  Úextendr³   Úcopyr¬   Údirect_importsÚitemsr   rŠ   Údepsr�   rB  r   r3   Úfix_module_depsr8  r  rF  )r—   ró   r  r  r9  ré   Úorig_modulesÚchanged_pathsr  ÚsourceÚseenrN  Ú	new_filesr  Úworklistr€   Úsources2rL  r^  Ú	module_idrM  Únew_messagesrP  Únew_unsuppressedÚmodrŠ   rQ  Ú	to_deleteÚmodule_pathÚt5r‰   s                                 @rC   r	  z,Server.fine_grained_increment_follow_imports_  sN  ø€ ô �Y‰Y‹[ˆð ×(Ñ(Ð4Ð4Ð4Ø#×8Ñ8ÐØ$×*Ñ*ˆØ&×.Ñ.ˆä˜EŸJ™J›LÓ)ˆà×Ñ˜GÔ$ØŸ™×3Ñ3Ó5ˆÜ3°G¸W¿_¹_Èg×N^ÑN^Ó_ˆÔä�Y‰Y‹[ˆØ�‰Ð<¸RÀ"¹WÀS¸MÈÐKÔLð
 -4Ö4 &�—“Ð4ˆÐ4ð "×@Ñ@Ø�U˜D -ó
Ñˆ�ð 	×Ñ ¨Ô1Ù ä& w°Ô8Ø�‰�yÔ!ð (×.Ñ.¨w¸ÀTÐ.ÓJˆð —<‘<“>ˆÙØ—\‘\“^ˆFØ�a‰y Ñ%ØØ×*Ñ*¨6°5Ó9ˆHð .6ÖS 6¸¿¹ÈdÒ9RšÐSˆHÐSØ!%×!DÑ!DØ˜%  }ó"ÑˆG�Yð ×Ñ 	Ô*Ø+×2Ñ2°7¸BÈÐ2ÓNˆHØ�O‰O˜GÔ$ò ô  �Y‰Y‹[ˆõ	Tô !% U§[¡[£]Ó 3ò 	(ÑˆI�uÜ8Ø˜5Ÿ:™:Ð';×'@Ñ'@À%ÈÏÉÐWcóˆLð Ñ'Ø'‘ð	(ô �Y‰Y‹[ˆð Ø#×9Ñ9¸%ÀÀw×G[ÑG[Ó\ÐÙ#ØØO_Ö`Èœ S¨¡V¨S°©V¸dÖCÐ`ˆIÐ`Ø�N‰N˜9Ô%Ø×Ñ 	Ô*Ø+×2Ñ2Ð3CÀRÐRVÐ2ÓWˆHà#3ò ,‘�	˜4Ü<Ø˜tÐ%9×%>Ñ%>ÀÀtÇ|Á|ÐUaó �ð  Ñ+Ø+‘Hð,ð ô  �Y‰Y‹[ˆð ˆ	Ø%ò 	;ˆIØ Ñ%ØØ Ò$Ø# IÑ.×3Ñ3�Ø"Ð.Ð.Ð.Ø× Ñ  )¨[Ð!9Õ:ð	;ñ Ø+×2Ñ2°2°yÓAˆHä˜Ôä 9¸%Ó @ˆÔØ×Ñ˜D×1Ñ1Ô2ð 	�‰×#Ñ#Ô%ä�Y‰Y‹[ˆà�‰Ð6°r¸B±w¸s°mÀ1ÐEÔFØ×ÑØ  2™gØ ™7Ø$&¨¡GØ')¨B¡wØ˜b™ð 	ô 	
ð ˆùòG 5ùò4 Tùò8 as   Ã#P1ÆP6Æ(P6Ê%P;c                ó¨  — g }g }|j                  «       }|j                  d„ |D «       «       |�r |j                  «       }|j                  |vr,|j	                  |j                  «       |j                  |«       |j                  |v r6|j                  €J ‚|j                  |j                  |j                  f«       nŽ|j                  |v r€||j                     }	|	j                  xs g }
|	j                  |
z   D ]O  }||vsŒ|j	                  |«       |j                  t        ||   j                  ||   j                  d¬«      «       ŒQ |r�Œ ||fS )a÷  Follow imports within graph from given sources until hitting changed modules.

        If we find a changed module, we can't continue following imports as the imports
        may have changed.

        Args:
            roots: modules where to start search from
            graph: module graph to use for the search
            seen: modules we've seen before that won't be visited (mutated here!!).
                  Needed to accumulate all modules encountered during update and remove
                  everything that no longer exists.
            changed_paths: which paths have changed (stop search here and return any found)

        Return (encountered reachable changed modules,
                unchanged files not in sources_set traversed).
        c              3  ó4   K  — | ]  }|j                   –— Œ y ­wr  r   )r%  ro  s     rC   r&  z8Server.find_reachable_changed_modules.<locals>.<genexpr>÷  s   è ø€ Ò9 f�F—M•MÑ9ùs   ‚Tr[  )rh  r³   r¬   r€   Úaddr3   rŠ   Ú	ancestorsÚdependenciesr   rE  )r—   Úrootsr9  rp  rn  rN  rq  rr  ÚnxtrM  r~  Údeps               rC   re  z%Server.find_reachable_changed_modulesÝ  s&  € ð. ˆØˆ	Ø—:‘:“<ˆØ�‰Ñ9°Ô9Ô9ÚØ—,‘,“.ˆCØ�z‰z Ñ%Ø—‘˜Ÿ™Ô$Ø× Ñ  Ô%Ø�x‰x˜=Ñ(Ø—x‘xÐ+Ð+Ð+Ø—‘ §
¡
¨C¯H©HÐ5Õ6Ø—‘˜uÑ$Ø˜cŸj™jÑ)�Ø!ŸO™OÒ1¨r�	Ø ×-Ñ-°	Ñ9ò d�CØ $’ØŸ™ œØ Ÿ™¬°E¸#±J·O±OÀUÈ3ÁZÇ]Á]Ð]aÔ(bÕcðdó ð ˜	Ð!Ð!rf   c                ó‚   — ||d      }|j                   D �cg c]  }t        ||   j                  |d¬«      ‘Œ c}S c c}w )z9Return the direct imports of module not included in seen.r   Tr[  )r  r   rŠ   )r—   r€   r9  rM  r‚  s        rC   ri  zServer.direct_imports	  s=   € ð �f˜Q‘iÑ ˆØLQ×L^ÑL^Ö_ÀS”˜E #™JŸO™O¨S¸4Ö@Ò_Ð_ùÒ_s   —"<c                óŠ  — t        «       }|j                  «       D ]  }||j                  z  }Œ |D �ch c]  }||vrt        |«      s|’Œ }}|D �ch c]  }|j	                  dd«      d   ’Œ }}t        ||| j                  «      }t        || j                  | j                  «      }g }	|D ]‹  }|j	                  dd«      d   }
|
|vrŒ|j                  |d¬«      }t        |t        «      sŒA||vsŒF| j                  «       s|j                  d«      sŒh|	j                  ||f«       |j                  |«       Œ� |	S c c}w c c}w )a_  Find suppressed modules that have been added (and not included in seen).

        Args:
            seen: reachable modules we've seen before (mutated here!!).
                  Needed to accumulate all modules encountered during update and remove
                  everything that no longer exists.

        Return suppressed, added modules.
        ú.r*   r   T)Ú	fast_pathú.pyi)r  r;  Úsuppressed_setr�   ÚsplitÚ%filter_out_missing_top_level_packagesr�   r   r;   Úfind_modulerª   r«   r  Úendswithr3   r}  )r—   r9  rp  rC  Úall_suppressedrM  r€   ÚpackagesÚfinderÚfoundÚtop_level_pkgrI  s               rC   rB  zServer.find_added_suppressed  sU  € ô ›ˆØ—\‘\“^ò 	3ˆEØ˜e×2Ñ2Ñ2‰Nð	3ð )ö
àØ˜UÑ"Ô+DÀVÔ+Lò ð
ˆð 
ð ;IÖI°�F—L‘L  aÓ(¨Ó+ÐIˆÐIÜ8¸À<ÐQU×Q]ÑQ]Ó^ˆô ! ¨t¯|©|¸T¿\¹\ÓJˆàˆà$ò 	!ˆFØ"ŸL™L¨¨aÓ0°Ñ3ˆMØ HÑ,àØ×'Ñ'¨¸$Ð'Ó?ˆFÜ˜&¤#Õ&¨6¸Ò+=à×-Ñ-Ô/¸¿¹ÈÔ8OØØ—‘˜f fÐ-Ô.Ø—‘˜Õ ð	!ð ˆùò?
ùò Js   ³D;ÁE c                ó€   — |rdnd}| j                  |t        |«      ||«      }dj                  d„ |D «       «      d|dœS )Nr*   r   r¢   c              3  ó&   K  — | ]	  }|d z   –— Œ y­wr#  rÝ   r$  s     rC   r&  z*Server.increment_output.<locals>.<genexpr>I  r3  r'  rß   )rH  r7  r²   )r—   r  ró   rÅ   rÆ   râ   s         rC   r
  zServer.increment_outputD  sD   € ñ ‘ AˆØ×'Ñ'¨´#°g³,ÀÈÓWˆØ—w‘wÑ:°Ô:Ó:À2ÐQWÑXÐXrf   c                ó  — | j                   j                  xr |}| j                   j                  xr |}|r| j                  j	                  ||¬«      }| j                   j
                  rgd }t        |«      \  }}	}
|r | j                  j                  ||
||¬«      }n,|r|	t        |«      k(  r| j                  j                  ||«      }|r||gz   }|r(|D �cg c]  }| j                  j                  |«      ‘Œ }}|S c c}w )N)Úfixed_terminal_width)Ú	use_color)r;   Úcolor_outputÚprettyr–   Úfit_in_terminalÚerror_summaryr"   Úformat_errorr7  Úformat_successÚcolorize)r—   r  Ú	n_sourcesrÅ   rÆ   r–  Ú	fit_widthÚsummaryÚn_errorsrS  Ún_filesÚms               rC   rH  zServer.pretty_messagesK  sü   € ð —L‘L×-Ñ-Ò8°&ˆ	Ø—L‘L×'Ñ'Ò2¨Fˆ	ÙØ—~‘~×5Ñ5Ø¨~ð 6ó ˆHð �<‰<×%Ò%Ø"&ˆGÜ)4°XÓ)>Ñ&ˆH�g˜wÙØŸ.™.×5Ñ5Ø˜g y¸Ið 6ó ‘ñ  ¬C°«MÒ!9ØŸ.™.×7Ñ7¸	À9ÓM�Ùà# w iÑ/�ÙØ<DÖE°q˜Ÿ™×/Ñ/°Õ2ÐEˆHÐEØˆùò Fs   Ã"C=c                ó  — |D �cg c]  }|j                   €Œ|j                   ‘Œ }}| j                  «       r+|D �cg c]   }| j                  j                  |«      sŒ|‘Œ" }}| j                  j                  |«       y c c}w c c}w r  )rŠ   r  r�   r‹   rÎ   Úadd_watched_paths)r—   ró   ro  ÚpathsrŠ   s        rC   r4  zServer.update_sourcesh  sp   € Ø+2ÖN °f·k±kÑ6M�—“ÐNˆÐNØ×!Ñ!Ô#à&+ÖI˜d¨t¯|©|×/BÑ/BÀ4Õ/H’TÐIˆEÐIØ�‰×(Ñ(¨Õ/ùò	 Oùò Js   …A>—A>» BÁBc                ó^   — | j                   j                  ||«      }| j                  ||«      S r  )rÎ   rW  Ú_find_changed)r—   ró   r  r³   rn  s        rC   rW  zServer.update_changedo  s-   € ð Ÿ™×5Ñ5°f¸fÓEˆØ×!Ñ! '¨=Ó9Ð9rf   c                óZ   — | j                   j                  «       }| j                  ||«      S r  )rÎ   rA  r¨  )r—   ró   rn  s      rC   rA  zServer.find_changedu  s'   € ØŸ™×3Ñ3Ó5ˆØ×!Ñ! '¨=Ó9Ð9rf   c                óB  — |D �cg c]4  }|j                   r&|j                   |v r|j                  |j                   f‘Œ6 }}|D �ch c]  }|j                  ’Œ }}| j                  D �cg c]  }|j                  |vsŒ|‘Œ }}g }|D ]/  }|j                   }|sJ ‚|j                  |j                  |f«       Œ1 | j	                  ||«       | j                  D �	ci c]  }	|	j                   |	j                  “Œ }
}	|D ]�  }	|	j                   sJ ‚|	j                   |
v sŒ |
|	j                      |	j                  k7  sŒ=|j                  |
|	j                      |	j                   f«       |j                  |	j                  |	j                   f«       Œ� ||fS c c}w c c}w c c}w c c}	w r  )rŠ   r€   r  r3   rf  )r—   ró   rn  ro  rN  ÚmodulesÚomittedrO  rŠ   rÔ   Úlasts              rC   r¨  zServer._find_changedy  s  € ð "ö
àØ�{Š{˜vŸ{™{¨mÑ;ð �]‰]˜FŸK™KÒ(ð
ˆð 
ð 07Ö7 V�6—=“=Ð7ˆÐ7Ø(,×(=Ñ(=Ö^˜fÀÇÁÐV]ÒA]’6Ð^ˆÐ^ØˆØò 	2ˆFØ—;‘;ˆDÙˆK�4Ø�N‰N˜FŸM™M¨4Ð0Õ1ð	2ð
 	×Ñ ¨Ô1ð +/×*?Ñ*?Ö@ Q�—‘˜Ÿ™Ñ Ð@ˆÐ@Øò 	3ˆAØ—6’6ˆM�6Ø�v‰v˜Š~ $ q§v¡v¡,°!·(±(Ó":à—‘  Q§V¡V¡¨a¯f©fÐ5Ô6Ø—‘ §¡¨!¯&©&Ð1Õ2ð	3ð ˜ÐÐùò5
ùò 8ùÚ^ùò As   …9FÁFÁ'FÁ;FÃFc                óF  — | j                   D �ch c]  }|j                  ’Œ }}t        |«      }|j                  |D �cg c]N  }|j                  r@|j                  |vr2|j                  |j                  f|vr|j                  |j                  f‘ŒP c}«       y c c}w c c}w r  )r  r€   r  rg  rŠ   )r—   ró   rN  ro  Úprevious_modulesÚchanged_sets         rC   rf  zServer.add_explicitly_new™  s�   € ð 9=×8MÑ8MÖN¨f˜FŸM›MÐNÐÐNÜ˜'“lˆØ�‰ð &öàØ—;’;Ø—M‘MÐ)9Ñ9Ø—]‘] F§K¡KÐ0¸ÑCð	 —‘ §¡Ò,òõ	
ùò Oùòs   �B¾ABc
           
     óâ  — | j                   sddiS t        | j                   |||||||	¬«      }
| j                  j                  }d| j                  _        	 |dk(  r|
j	                  |«      }n5|dk(  r|
j                  |«      }n|dk(  r|
j                  |«      }nJ d«       ‚|| j                  _        d	|v r"t        |d	   t        «      sJ ‚|d	xx   d
z  cc<   |S # || j                  _        w xY w)z!Locate and inspect expression(s).rn   zWCommand "inspect" is only valid after a "check" command (that produces no parse errors))Ú	verbosityÚlimitÚinclude_spanÚinclude_kindÚinclude_object_attrsÚunion_attrsÚforce_reloadTÚtypeÚattrsÚ
definitionzUnknown inspection kindrà   r¡   )	r‰   r   r;   ÚinspectionsÚget_typeÚ	get_attrsÚget_definitionrª   r«   )r—   ÚshowÚlocationr²  r³  r´  rµ  r¶  r·  r¸  ÚengineÚold_inspectionsrI  s                rC   Úcmd_inspectzServer.cmd_inspect«  s  € ð ×(Ò(àð 3ðð ô "Ø×%Ñ%ØØØ%Ø%Ø!5Ø#Ø%ô	
ˆð Ÿ,™,×2Ñ2ˆØ#'ˆ�‰Ô ð
	7Ø�vŠ~ØŸ™¨Ó2‘Ø˜’Ø×)Ñ)¨(Ó3‘Ø˜Ò%Ø×.Ñ.¨xÓ8‘à7Ð7Ó7�uà'6ˆD�L‰LÔ$Ø�F‰?Ü˜f U™m¬SÔ1Ð1Ð1Ø�5‹M˜TÑ!‹MØˆøð	 (7ˆD�L‰LÕ$ús   ÁAC ÃC.c                óŒ  — | j                   sddiS t        | j                   fi |¤Ž}	 |r|j                  |«      }n|j                  |«      }|sd}n|j	                  d«      s|dz  }|dddœ| j                  «        S # t        $ r'}dt        |«      icY d}~| j                  «        S d}~ww xY w# | j                  «        w xY w)	z#Suggest a signature for a function.rn   zWCommand 'suggest' is only valid after a 'check' command (that produces no parse errors)zNo suggestions
r¡   r¢   r   rß   N)r‰   r   Úsuggest_callsitesÚsuggestrŒ  r  r   r«   )r—   ÚfunctionÚ	callsitesÚkwargsrÂ  rà   rá   s          rC   Úcmd_suggestzServer.cmd_suggestÙ  sÍ   € à×(Ò(àð 3ðð ô " $×";Ñ";ÑF¸vÑFˆð	 ÙØ×.Ñ.¨xÓ8‘à—n‘n XÓ.�ñ Ø(‘Ø—\‘\ $Ô'Ø�t‘�Ø r°QÑ7à×ÑÕøô !ò 	'ØœS ›XÐ&Ô&ð ×ÑÕûð	'ûð ×ÑÕús5   ¨%A> Á B1 Á>	B.ÂB)ÂB.ÂB1 Â)B.Â.B1 Â1Cc                ó0   — t        j                  d«       i S )z&Hang for 100 seconds, as a debug hack.éd   )r  Úsleepr×   s    rC   Úcmd_hangzServer.cmd_hangñ  s   € ä�
‰
�3ŒØˆ	rf   r  )r;   r   r<   r«   r=   ú
int | Nonerb  ÚNone)rb  zdict[str, str])rb  rÑ  )r?   r«   r¼   údict[str, object]rb  rÒ  )rÒ   ú
str | Nonerb  rÒ  )rb  rÒ  )rð   r«   rñ   úSequence[str]rò   ÚboolrÅ   rÕ  rÆ   Úintrb  rÒ  )
rø   rÔ  rò   rÕ  rÅ   rÕ  rÆ   rÖ  rb  rÒ  ©NN)rÅ   rÕ  rÆ   rÖ  rò   rÕ  r  úlist[str] | Noner³   rØ  rb  rÒ  )
ró   úlist[BuildSource]rò   rÕ  rÅ   rÕ  rÆ   rÖ  rb  údict[str, Any])rÓ   rÚ  rb  rÑ  )rb  rÕ  )ró   rÙ  rÅ   rÕ  rÆ   rÖ  rb  rÚ  )NNF)
ró   rÙ  r  rØ  r³   rØ  r  rÕ  rb  rc  )F)ró   rÙ  r  rÕ  rb  rc  )
r€  rÙ  r9  úmypy.build.Graphrp  úset[str]rn  úAbstractSet[str]rb  z/tuple[list[tuple[str, str]], list[BuildSource]])r€   ztuple[str, str]r9  rÛ  rb  rÙ  )r9  rÛ  rp  rÜ  rC  r   rb  úlist[tuple[str, str]])
r  rc  ró   rÙ  rÅ   rÕ  rÆ   rÖ  rb  rÚ  )FN)
r  rc  rž  rÖ  rÅ   rÕ  rÆ   rÐ  rb  rc  )ró   rÙ  rb  rÑ  )ró   rÙ  r  rc  r³   rc  rb  r…   )ró   rÙ  rb  r…   )ró   rÙ  rn  rÝ  rb  r…   ©ró   rÙ  rN  rÞ  rb  rÑ  )r   r   FFFFF)rÀ  r«   rÁ  r«   r²  rÖ  r³  rÖ  r´  rÕ  rµ  rÕ  r¶  rÕ  r·  rÕ  r¸  rÕ  rb  rÒ  )rÈ  r«   rÉ  rÕ  rÊ  r	   rb  rÒ  ) Ú__name__Ú
__module__Ú__qualname__r˜   r�   re   r­   rÕ   rØ   rö   rù   r  rÃ   r  r  r  r  r  r	  re  ri  rB  r
  rH  r4  rW  rA  r¨  rf  rÄ  rË  rÏ  rÝ   rf   rC   rd   rd   ¬   sœ  „ ô"ZóHQó?5óBô"
óð)Iàð)Ið ð)Ið ð	)Ið
 ð)Ið ð)Ið 
ó)IðVIØ"ðIØ26ðIØ@DðIØVYðIà	óIð $(Ø#'ð1àð1ð ð1ð ð	1ð
 !ð1ð !ð1ð 
ó1ðfØ(ðØ8<ðØFJðØ\_ðà	óó24ó
ó7ð
VYØ(ðVYØ26ðVYØHKðVYà	óVYðv $(Ø#'Ø&+ð4à"ð4ð !ð4ð !ð	4ð
  $ð4ð 
ó4ðn INð|Ø(ð|ØAEð|à	ó|ð|*"à ð*"ð  ð*"ð ð	*"ð
 (ð*"ð 
9ó*"ðX`Ø%ð`Ø.>ð`à	ó`ð2Ø%ð2Ø-5ð2ØEPð2à	ó2ðhYØ!ðYØ,=ðYØGKðYØ]`ðYà	óYð Ø%)ðàðð ðð ð	ð
 #ðð 
óó:0ð:Ø(ð:Ø2;ð:ØENð:à	ó:ó:ð Ø(ð Ø9Ið à	ó ð@
Ø(ð
Ø3Hð
à	ó
ð, ØØ"Ø"Ø%*Ø!Ø"ð,àð,ð ð,ð ð	,ð
 ð,ð ð,ð ð,ð #ð,ð ð,ð ð,ð 
ó,ó\ ô0rf   rd   i   ÚMiBc                 óÌ  — i } 	 dd l }|j                  «       }|j                  «       }|j                  t        z  | d<   |j
                  t        z  | d<   t        j                  dk(  r|j                  t        z  | d<   | S dd l	}|j                  |j                  «      }t        j                  dk(  rd}nd}|j                  |z  t        z  | d<   | S # t        $ r	 d	| d
<   Y | S w xY w)Nr   Úmemory_rss_mibÚmemory_vms_mibr%   Úmemory_maxrss_mibÚdarwinr*   i   zXpsutil not found, run pip install mypy[dmypy] to install the needed components for dmypyÚmemory_psutil_missing)ÚpsutilÚProcessÚmemory_infoÚrssrã  Úvmsr.   rš   Ú	peak_wsetÚresourceÚ	getrusageÚRUSAGE_SELFÚ	ru_maxrssÚImportError)rÓ   rê  ÚprocessÚmeminforð  ÚrusageÚfactors          rC   rÏ   rÏ   ý  sö   € Ø€CðGÛð —.‘.Ó"ˆØ×%Ñ%Ó'ˆØ '§¡¬cÑ 1ˆÐÑØ '§¡¬cÑ 1ˆÐÑÜ�<‰<˜7Ò"Ø'.×'8Ñ'8¼3Ñ'>ˆCÐ#Ñ$ð €Jó à×'Ñ'¨×(<Ñ(<Ó=ˆFÜ�|‰|˜xÒ'Ø‘à�Ø'-×'7Ñ'7¸&Ñ'@Ä3Ñ'FˆCÐ#Ñ$Ø€Jøô- ò 
ð9ð 	Ð#Ò$ð* €Jð-
ús   „C ÃC#Ã"C#c                óÜ   — t        |«      }|D �ch c]  }|j                  ’Œ }}| j                  «       D ]/  \  }}||vsŒ|j                  t	        |j
                  |«      «       Œ1 |S c c}w r  )rå   r€   rj  r3   r   rŠ   )r9  ÚextrarI  ro  rp  r€   rM  s          rC   r8  r8    sh   € ô �%‹[€FØ(.Ö/˜fˆF�M‹MÐ/€DÐ/ØŸ™›ò ;‰ˆ�Ø˜ÒØ�M‰Mœ+ e§j¡j°&Ó9Õ:ð;ð €Mùò	 0s   �A)c                óÚ   — t        |«      }|j                  | D �cg c]@  }|j                  r2|j                  |j                  f|vr|j                  |j                  f‘ŒB c}«       yc c}w )zÀAdd all (explicit) sources to the list changed files in place.

    Use this when re-processing of unchanged files is needed (e.g. for
    the purpose of exporting types for inspections).
    N)r  rg  rŠ   r€   )ró   rN  r°  Úbss       rC   rX  rX  %  s^   € ô �g“,€KØ‡N�Nð ö	
àØ�wŠw˜BŸI™I r§w¡wÐ/°{ÑBð �Y‰Y˜Ÿ™Ò ò	
õùò	
s   ›AA(c                ó  — | j                  «       D ]y  }g }g }|j                  |j                  z   D ])  }|| v r|j                  |«       Œ|j                  |«       Œ+ ||_        t	        |«      |_        ||_        t	        |«      |_        Œ{ y)zäAfter an incremental update, update module dependencies to reflect the new state.

    This can make some suppressed dependencies non-suppressed, and vice versa (if modules
    have been added to or removed from the build).
    N)r;  r  Ú
suppressedr3   r  Údependencies_setrˆ  )r9  rM  Únew_suppressedÚnew_dependenciesr‚  s        rC   rl  rl  5  s”   € ð —‘“ò 3ˆØˆØÐØ×%Ñ%¨×(8Ñ(8Ñ8ò 	+ˆCØ�e‰|Ø ×'Ñ'¨Õ,à×%Ñ% cÕ*ð		+ð
 .ˆÔÜ!$Ð%5Ó!6ˆÔØ)ˆÔÜ" >Ó2ˆÕñ3rf   c                ó–  — t        «       }|j                  |j                  z   |j                  z   |j                  z   }|D ]u  }	 |j                  |«      }|D ]\  }|j                  d«      r|dd }n-|j                  d«      r|dd }n|j                  d«      r|dd }|| v sŒL|j                  |«       Œ^ Œw |S # t        $ r g }Y Œrw xY w)a  Quickly filter out obviously missing top-level packages.

    Return packages with entries that can't be found removed.

    This is approximate: some packages that aren't actually valid may be
    included. However, all potentially valid packages must be returned.
    z.pyNéýÿÿÿr‡  éüÿÿÿz-stubsiúÿÿÿ)	r  Úpython_pathÚ	mypy_pathÚpackage_pathÚtypeshed_pathÚlistdirr®   rŒ  r}  )rŽ  rC  r�   r�  r¦  r  ÚentriesÚentrys           rC   rŠ  rŠ  I  sò   € ô ‹E€Eà× Ñ Ø
×
 Ñ
 ñ	!à
×
#Ñ
#ñ	$ð ×
$Ñ
$ñ	%ð 
ð ò !ˆð	Ø—o‘o aÓ(ˆGð ò 	!ˆEð �~‰~˜eÔ$Ø˜c˜r˜
‘Ø—‘ Ô'Ø˜c˜r˜
‘Ø—‘ Ô)à˜c˜r˜
�Ø˜Ò Ø—	‘	˜%Õ ñ	!ð!ð" €Løô ò 	ØŠGð	ús   ÁB:Â:CÃCr×  )
r;   r   r<   r«   r=   rÐ  r>   rÓ  rb  rÖ  r  )r[   zCallable[[], None]r>   rÓ  rb  rÖ  )ry   rc  rz   rÕ  rb  r   )r€   r«   rb  rÕ  )rb  rÚ  )rÝ   )r9  rÛ  rú  zSequence[BuildSource]rb  rÙ  rß  )r9  rÛ  rb  rÑ  )rŽ  rÜ  rC  r   r�   r   rb  rÜ  )YÚ__doc__Ú
__future__r   ræ   rã   r¥   rO   r0   r7   r.   r  r¯   Úcollections.abcr   r   r   ÚAbstractSetÚ
contextlibr   r   Útypingr	   r
   r   r‚   Úlibrt.base64r   Ú
mypy.buildrp   Úmypy.errorsÚ	mypy.mainÚmypy.dmypy_utilr   r   r   Úmypy.find_sourcesr   r   Úmypy.fscacher   Úmypy.fswatcherr   r   Úmypy.inspectionsr   Úmypy.ipcr   Úmypy.modulefinderr   r   r   r   Úmypy.optionsr   Úmypy.server.updater   r   Úmypy.suggestionsr   r   Úmypy.typestater    Ú	mypy.utilr!   r"   Úmypy.versionr#   r$   Ú__annotations__rš   r&   rD   rb   rh   r|   r�   Útupler«   rƒ   rå   r„   r…   rd   rã  rÏ   r8  rX  rl  rŠ  rÝ   rf   rC   ú<module>r%     s¼  ðòõ #ã Û 	Û Û 	Û Û Û 
Û Û ß BÑ Bß 7ß 6Ñ 6å "ã Û Û ß 6Ñ 6ß CÝ (ß 6Ý -Ý ß ]Ó ]Ý  ß Uß @Ý -ß 1Ý $à€ˆUÓ à‡<�<�7ÒÝ&ð `dð Øð Ø'*ð Ø5?ð ØR\ð à	ô ô>+ð\ `dðTØðTØ'*ðTØ5?ðTØR\ðTà	óTð !€�Ó  óó*+ð # 3¨ 8™_€�
Ó ,Ø" >Ñ2€�Ó 2Ø!& ¸Ð'GÑ!HÐ �JÓ H÷Hñ Hð\ €€UÓ óð< =?ðØðØ$9ðàóóó 3ð(#Øð#Ø&1ð#Ø<Kð#àô#rf   